为什么我要 free() 一个由 malloc() 分配的对象?

Rob*_*rtS 0 c malloc free memory-management heap-memory

我总是被告知释放由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;
}
Run Code Online (Sandbox Code Playgroud)

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

但是当时为什么我的老师要我这样做呢?这样做有什么好处吗?

dat*_*olf 5

但是当时为什么我的老师要我这样做呢?这样做有什么好处吗?

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

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