我原先以为, 在LINUX 里, 程序退出后, 其申请的内存操作系统不会马上标记为FREE.
实际上, 这个观点是错误的.
我用下面这段小程序做了个实验
[PHP]
#include
#include
#include
#include
main( int argc, char ** argv )
{
char * pTest=0;
long iSize;
if( 2 == argc ){
iSize = atoi( argv[1] );
}
else{
printf("Usage: eatmem \n"
;
return 1;
}
// if( NULL != ( pTest = (char*) malloc( iSize*sizeof(char) )))
if( NULL != ( pTest = new char[ iSize ] ))
printf( "Eat memory %ld\n", iSize );
else
printf( "No such more memory!\n" );
while(1){
memset(pTest,0,iSize);
sleep(10);
};
}
[/PHP]
先查看系统的空闲内存 , 约 1.8G
# free
total used free shared buffers cached
Mem: 2061652 194896 1866756 0 13872 23648
-/+ buffers/cache: 157376 1904276
Swap: 4096312 141040 3955272
运行 eatmem 这个程序, 吃掉500M
./eatmem 500000000 &
再看系统的空闲内存, 少了500M 左右.
# free
total used free shared buffers cached
Mem: 2061652 684476 1377176 0 14024 23648
-/+ buffers/cache: 646804 1414848
Swap: 4096312 141036 3955276
退出eatmem 再看, 内存几乎都回来了.
[root@l149 root]# free
total used free shared buffers cached
Mem: 2061652 195600 1866052 0 14064 23648
-/+ buffers/cache: 157888 1903764
Swap: 4096312 141036 3955276