为什么free()for poiters不会释放内存?

时间:2018-04-25 16:03:33

标签: c memory-management memory-leaks malloc free

我试图在指针数组后释放内存,如下面的代码所示:

int ** t = (int**) malloc(sizeof(int*)*10000000);
printf("1\n");
getchar();
for(int i =0; i < 10000000; i++){
    t[i] = (int*) malloc(sizeof(int));
    *t[i] = i;
}
printf("2\n");
getchar();

for(int i =0; i < 10000000; i++){
    free(t[i]);
}
printf("3\n");
getchar();

free(t);
printf("4\n");
getchar();

在执行期间,我的系统监视器显示了一些奇怪的值。当显示特定数字时(如在代码中),我得到以下内存使用。

  1. 148K
  2. 390,540K
  3. 390,540K
  4. 312,676K
  5. 我有点困惑。为什么2和3中的数字相同?我做错了什么,或者系统监控不准确?如果它是SM的错误那么为什么它注意到3和4之间的差异?

1 个答案:

答案 0 :(得分:1)

free()的行为取决于其底层实现。 free()的大多数实现都不会将释放的内存返回给操作系统,而只是将内存返回池中,从中满足malloc请求,这意味着释放的内存现在可供程序重用。检查this