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

标签 c memory-management malloc heap-memory free

我总是被告知要释放 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?我不需要这样做,因为操作系统会在程序终止后自动释放占用的内存。

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

最佳答案

But why did my teacher told me to do so then? Is there any benefit of doing so?

考虑一下,如果您的程序是一个长时间运行的进程(例如数据库服务器),并且在其内部的某个位置有一个函数不断分配内存(例如,每次处理查询时),会发生什么情况?永远不会释放它。或者,更普通的是,桌面应用程序(例如文字处理器)您希望在处理某事时保持运行。

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

关于c - 为什么我要 free() 一个由 malloc() 分配的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917863/

相关文章:

iphone - 如何显示 iPhone 可用内存?以及如何释放 iPhone 内存?

c++ - 是否有任何好的 C++ 自定义分配器可以最大化引用的位置?

c - 为 SHA1 摘要数组分配内存

c - C中MD5的实现

c - 为什么首先中断发生在注册时?

使用有符号字符指针更改 int 数组的值

c - 调用 free 后内存使用量不会减少

c - 在 C 程序中,我尝试使用 ECB 模式加密 AES 128

c - 分配大小错误或自由方法的错误使用?

c - 制作队列程序