linux下delete释放不了内存,new了以后,马上delete,但是用prstat, pmap查看,内存不减少,为什么?...
new了以后,马上delete,但是用prstat, pmap查看,内存不减少,为什么?
1、
void f()
{
char * p = new char[1024 * 1024 * 4]; //用prstat,pmap查看,内存增加了4M
sleep(5);
delete [] p; //delete完以后,但是用prstat,pmap查看,内存没有减少
}
2、
main()
{
while (1)
{
f (); //这里虽然死循环,但是内存只涨了一次,4M,以后就没有关系了。
}
}
为什么?
3、
同样的程序我在windows下测试,就没有这个现象:new ---- +4M, delete -------- -4M
分不够再加,如果你在深圳,我请你吃饭
|
从这个case看,在没有调用new char的时候系统会分配1112k的地址空间,在调用
new char以后,new char会产生一个heap,地址空间大小是1032k。但是地址空间
不代表实际分配的内存,内存是有系统核心分配的,是动态的。而且在一个程序中
循环调用new char和多个并行进程调用new char是个不同的,也不是一个概念。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
