C语言 为什么我要释放 malloc() 分配的对象?



我总是被告知要释放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;
}

但是现在我已经读到了当你在malloc之后不释放时会发生什么?我不必这样做,因为操作系统将在程序终止后自动释放占用的内存。

但是为什么我的老师告诉我这样做呢?这样做有什么好处吗?

但是为什么我的老师告诉我这样做呢?这样做有什么好处吗?

想一想,如果你的程序是一个长时间运行的进程(比如数据库服务器(,并且在其内部的某个地方有一个函数不断分配内存(比如说,每次处理查询时(,但从不释放内存,会发生什么。或者,更平凡的是,一个桌面应用程序,如文字处理器,您希望在处理某些事情时继续运行。

是的,操作系统将在进程终止后释放进程使用的所有资源。但许多程序都不是短暂的。

在您的示例中,这无关紧要,因为正如您所说,操作系统将在程序退出时为您清理。

但无论如何,强烈建议这样做。一旦您的程序变得比此示例稍微复杂一点,您将遇到必须释放分配的内存以避免内存泄漏的情况。

当您已分配内存但不再持有指向它的任何指针,并且您的程序仍在运行时,就会发生内存泄漏。由于 C 没有垃圾回收,因此在程序退出之前,语言和操作系统都不会清理此内存,因为它无法知道您打算清理它,因为您没有调用free()。如果您打算编写长时间运行的程序,这将非常成问题。

相关内容

  • 没有找到相关文章

最新更新