我试图在指针数组后释放内存,如下面的代码所示:
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();
在执行期间,我的系统监视器显示了一些奇怪的值。当显示特定数字时(如在代码中),我得到以下内存使用。
我有点困惑。为什么2和3中的数字相同?我做错了什么,或者系统监控不准确?如果它是SM的错误那么为什么它注意到3和4之间的差异?
答案 0 :(得分:1)
free()
的行为取决于其底层实现。 free()
的大多数实现都不会将释放的内存返回给操作系统,而只是将内存返回池中,从中满足malloc
请求,这意味着释放的内存现在可供程序重用。检查this。