【发布时间】:2011-12-27 16:32:19
【问题描述】:
我有一个关于我的代码的简短问题。我创建了两种情况或示例进行测试。
示例 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;
}
示例中的不同之处:在释放内存之前放入数组。
当我运行示例 1 时,它释放了所有内存。当我运行示例 2 时,它不会释放所有内存。 我找了又看,还是没弄明白。
为什么示例 2 的结果与示例 1 不同?
我的常识告诉我示例 1 和示例 2 的结果应该相同,但实际上并非如此。我使用 linux top 来检查内存使用情况。
【问题讨论】:
-
你怎么知道它不会释放所有内存?
-
您如何推断第二个示例没有释放所有内存?
-
你检查了什么?进程的 RSS?
-
如果你真的认为有些东西被遗漏了,我会在 valgrind 下运行这两个。