【发布时间】:2018-04-25 16:03:32
【问题描述】:
我正在尝试在指针数组之后释放内存,如下代码所示:
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();
在执行期间,我的系统监视器向我显示了一些奇怪的值。当显示特定数字时(如代码中所示),我得到以下内存使用情况。
- 148K
- 390,540K
- 390,540K
- 312,676K
我有点困惑。为什么 2 和 3 中的数字相同?是我做错了什么,还是系统监视器不准确?如果是SM的错,为什么它注意到3和4之间的差异?
【问题讨论】:
-
在虚拟内存系统上,系统倾向于在您实际使用内存之前不会提交页面。而
free往往不会将内存归还给操作系统。 -
"我得到以下内存使用情况" - 来自 where ??任务人??您实现的子分配器可能会将内存保留在空闲列表中,仍然从操作系统分配,但准备好进行另一轮(现在更快)分配。
-
内存已经释放到堆,但是堆可能还没有释放到系统。没必要。
-
如果你在 linux 上运行你的程序在 valgrind 下。这真的会告诉你内存是否被释放
-
欢迎来到 Stack Overflow! Do I cast the return of malloc ?
标签: c memory-management memory-leaks malloc free