我有一个关于我的代码的简短问题。我已经创建了两种情况或用于测试的示例。C内存免费混淆
例1:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
free(c);
}
例2:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
arr[i] = c;
free(arr[i]);
arr[i] = NULL;
}
在实施例中的型动物:将在阵列free'ing存储器之前。
当我运行例如1这是免费的所有内存。当我运行示例2时,它不释放所有内存。 我已经搜查,但看不出来。
为什么是实施例2不同,则实施例1的结果?
我的常识告诉我,例如1和2应该导致同样的,但在实践中并非如此。我使用linux top来检查内存使用情况。
你怎么知道它不释放所有内存? – EricSchaefer
你是如何推断第二个例子没有释放所有内存的? – Joe
你检查了什么?过程的RSS? – wildplasser