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是个不同的,也不是一个概念。</