目录
1.malloc申请空间
2.申请1G或者更大空间,到底能不能成功?
3.32位操作系统进程的4G虚拟空间分布
4.父子进程
1.malloc申请空间
进程在执行的过程中,malloc申请空间,不使用时,没有free就会出现内存泄漏;如果进程结束了,那么所有向操作系统申请的内存都会被释放
2.申请1G或者更大空间,到底能不能成功?
如果当前物理内存剩余空间够用,那么申请空间肯定能成功;
如果物理内存不够,先看有没有虚拟内存,如果有,看虚拟内存+物理内存能否满足申请空间的大小;
sudo swapoff -a;关闭虚拟内存(临时关闭)
sudo swapon -a;开启虚拟内存
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<assert.h>
int main()
{
char *s=(char*)malloc(1024*1024*1024);
assert(s!=NULL);
memset(s,0,1024*1024*1024);
printf("main over!\n");
exit(0);
}
3.32位操作系统进程的4G虚拟空间分布
4.父子进程
父进程堆区申请空间复制后,子进程也有一份,也需要释放
fork会把进程的上下文都复制一遍,如果时malloc申请的话,
内核会给子进程和父进程一样多的空间,父子进程都需要分别free
#include<string.h>
#include<fcntl.h>
#include<assert.h>
#include<unistd.h>
int main()
{
char *s=(char*)malloc(128);
assert(s!=NULL);
pid_t pid=fork();
assert(pid!=-1);
if(pid=0)
{
strcpy(s,"child");
}
else
{
strcpy(s,"parent");
}
printf("s=%s\n",s);
free(s);
exit(0);
}
代码运行结果: