在這邊提出來請各位先進幫忙解惑
一般我們都會使用ps aux 來看程序所佔用的cpu與memory(VSZ)
例:
ddy 1316 0.0 0.0 1348 332 pts/8 S 11:44 0:00 ./mem_test
藍色部份就是我用來觀察佔用多少memory 的依據,我不確定這是否準確,但是大部份人都是這樣觀察
我寫了個小的程式,來實驗,程式如下:
- 代碼: 選擇全部
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *p;
int i;
int size=0;
printf("Please input memory allocate size:");
scanf("%d",&size);
printf("\n");
printf("[before memory allocate]\n");
system("\nps aux |grep mem_test |grep -v grep");
p=(int *)malloc(size);
if (p!=NULL)
{
for (i=0;i<size;i++)
{
p[i]=i;
}
}
else
printf("malloc fail");
printf("\n\n[After memory allocate]\n");
system("\nps aux |grep mem_test |grep -v grep");
printf("\n\n[After Memory free]\n");
free(p);
system("\nps aux |grep mem_test |grep -v grep");
return 0;
}
分別在程式執行時觀察memory與allocate memory 之後觀察,
最後在free() 之後再觀察,結果如下:
- 代碼: 選擇全部
[ddy@ipdslam test]$ ./mem_test
Please input memory allocate size:1000
[before memory allocate]
ddy 1316 0.0 0.0 1348 332 pts/8 S 11:56 0:00 ./mem_test
[After memory allocate]
ddy 1316 0.0 0.0 1352 360 pts/8 S 11:56 0:00 ./mem_test
[After Memory free]
ddy 1316 0.0 0.0 1352 360 pts/8 R 11:56 0:00 ./mem_test
[ddy@ipdslam test]$
發現,程式一開始執行佔1348, allocate memory之後變成1352
但是free()之後,仍然是1352,這就令人不解了
小弟的問題整理如下:
1) ps VSZ 所顯示的值為何在 memory free 之後仍然不會降下來?該值所代表真正意義為何?
2) 由上可知 ps 裡的 VSZ 似乎不完全正確(在用來憑斷是否有memory leaks方面),然而在linux 下面,有什麼樣的function call 或是資料能正確的反應程式所耗的memory?