【发布时间】:2020-05-12 01:05:09
【问题描述】:
我总是被告知要释放malloc()分配的堆内存:
#include <stdlib.h>
#define width 5
int main(void)
{
char* ptr = malloc(sizeof(*ptr) * width);
/* some stuff with the heap object */
free(ptr);
return 0;
}
但现在我在What REALLY happens when you don't free after malloc? 中看到我不必这样做,因为操作系统会在程序终止后自动释放占用的内存。
但是为什么我的老师让我这样做呢?这样做有什么好处吗?
【问题讨论】:
-
这是非常好的做法。一旦您开发了分配大量内存的大型程序,您需要确保在不再需要时释放内存,否则您的大型程序可能会耗尽内存。
-
此外,能够毫无问题地释放所有分配的内存并通过堆检查以确保没有内存丢失来终止您的程序,这意味着您的程序没有或很少有内存错误的机会。
-
你提出的问题——为什么你的老师告诉你释放内存,即使通用操作系统回收它——在你引用的链接中得到了回答。正如它所说,在管理内存的操作系统上,没有绝对需要在进程退出之前释放内存,但这是帮助避免错误的好习惯(例如未能在循环中释放内存,导致“泄漏”)浪费内存并可能耗尽系统资源)以及使代码更容易修改和重用(例如将程序中的大部分代码放入另一个程序中的子程序中)。
-
那么为什么您的问题不应该作为重复项关闭呢?另外,请注意,在实践中经常存在little benefit to neglecting to free memory and letting the operating system do it,因为释放内存通常与结束进程的其他方面纠缠在一起,例如刷新文件缓冲区。
标签: c memory-management malloc heap-memory free