当我搜索“如果 malloc 并以 not free 退出会发生什么?”时,我可以找到“今天,操作系统将在程序退出后恢复所有分配的内存空间”的答案。

在那个答案中,“恢复”是什么意思?
当进程退出时,操作系统只是删除它的 PCB 和页表,不是吗?
操作系统是否需要完成其他任务才能完全终止进程?
提前致谢。

对不起我的英语不好。

附:我的意思是操作系统 Linux

最佳答案

当程序启动时,操作系统为其分配一些内存。在程序执行期间,程序可以从操作系统请求更多的内存块,并且在不再需要它们时也可以释放它们。当程序退出时,它使用的所有内存都返回给操作系统。
malloc()/free() 对(以及它们的兄弟和等价物)不与 OS1 交互。它们管理程序在启动时已经从操作系统获得的一块内存(称为“堆”)。

总而言之,从操作系统的角度来看,您的程序是否使用 free() 并不重要。对于程序来说,当不需要一块内存来让进一步的分配成功(通过重用释放的内存块)时,使用 free() 很重要。

1 这并不完全正确。 malloc() 的实现可能会从 OS 获取更多内存块以在堆满时扩展堆,但此过程对程序是透明的。从程序的角度来看,malloc()free() 在一个已经属于程序的内存块中运行。

关于linux - 操作系统是否必须释放进程的堆内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43065076/

10-13 08:11