在AIX上运行我的应用程序时,我看到了异常的内存使用模式...
我已经为malloc创建了一个简单的程序,并且可以自由地复制同样的问题。
int main()
{
int *ptr_one;
// enter value as 0.
// I wanted few secs fetch the PID of this statndlone process
// and run 'ps -p <PID> -o "vsz rssize"'
long a;
scanf("%ld", &a);
for(;;)
{
if(a < 10000000) a = a + 100;
ptr_one = (int *)malloc(sizeof(int)*a);
if (ptr_one == 0){
printf("ERROR: Out of memory\n");
return 1;
}
*ptr_one = 25;
printf("%d\n", *ptr_one);
free(ptr_one);
}
return 0;
}
我已使用以下命令
捕获了该程序的内存使用情况ps -p $1 -o "vsz rssize" | tail -1 >> out.txt
该图表显示内存不断增长而未释放。 这是否是泄漏的迹象,或者这是AIX上的正常内存行为?
答案 0 :(得分:0)
完全正确的是,进程的内存使用量不会减少:虽然malloc
可以为进程请求额外的内存,但free
永远不会将其返回给系统。相反,释放内存将在未来malloc
次调用中重复使用。