- malloc()申请1G的内存能否成功?判断依据是什么?
- 申请了一块空间没有free,进程就结束了,那么空间被回收了吗?
我们写一段代码来申请1G空间试一试
#include#include #include #include #include int main() { char *s = (char*)malloc(1024*1024*1024); assert(s! NULL); printf("main overn"); exit(0); }
这是我们执行程序前的资源情况
这是运行程序后
我们发现好像并没有太大的区别产生,这是因为我们申请内存后会在虚拟内存上进行划分,但是只有在真的使用这块空间的时候才会真正在分配物理内存
我们将代码进行修改
memset(s,0,1024*1024*1024);
我们添加这样一段代码,让我们申请到的空间进行清零
再次执行
内存占用增加,随后程序结束,内存释放 (运行过程中,需要对不用的空间进行free,而程序结束会自动将占用的内存释放)
假如我们内存空间不够用了,系统会将一部分不用内容存放在虚拟内存上,但是当程序结束后,外存上存储的一部分依旧还在,为什么程序结束不把那一部分调回来呢?系统在使用这部分内容时候才会将将其调回来,否则系统是不会随便 *** 作的,防止内存空间再次不足
swapoff -a 停止虚拟内存交换空间命令
如果我们停掉虚拟内存,再去使用程序去申请大于内存的空间,这时会直接运行失败
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)