Ubuntu 是否会在程序终止时自动释放由 C 程序分配的内存?

ash*_*ntu 11 kernel c

我编写了一个 C 程序,其中包含使用该malloc()函数分配内存的代码。如果我不使用该free()功能释放内存,Ubuntu会自动释放它吗?

kos*_*kos 16

是的。

内核将在程序终止时释放程序分配的所有资源。

这是在do_exit()定义的函数kernel/exit.c终止执行后完成的;该do_exit()函数的执行本身可能由多个事件触发,最常用的是一个明确exit()的规则计算过程或隐式由程序调用系统调用exit()通过在其终止的程序调用系统调用(如C编译器放置一个exit()后系统调用main()的返回)。其他原因包括接收到不可处理/不可忽略的信号或异常。

do_exit()函数本身执行许多任务。在它终止执行后,程序分配的资源由内核释放并返回给系统以供进一步使用。

来源

  • 但这当然不是“忘记” free() 的借口...... (7认同)