linux - 操作系统是否必须取消分配进程的堆内存?

标签 linux operating-system

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

在那个答案中,“恢复”是什么意思? 操作系统只是在进程退出时删除它的 PCB 和页表,不是吗? 操作系统是否必须执行其他任务才能完全终止进程?

最佳答案

当程序启动时,操作系统会为其分配一些内存。在程序执行期间,程序可以从操作系统请求更多的内存块,也可以在不再需要它们时释放它们。当程序退出时,它使用的所有内存都归还给操作系统。

malloc()/free() 对(以及它们的兄弟和等价物)不与 OS1 交互。它们管理程序启动时已经从操作系统获得的一 block 内存(称为“堆”)。

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


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

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

相关文章:

linux - 多核系统上的 Netfilter Hook

c - X11 - 在叠加窗口上绘制

c - 在 Linux 内核中启用调度程序统计信息

unix - Go 中 Syscall.RawSyscall() 和 Syscall.Syscall() 的详细信息?

haskell - dupTo 与 STDOUT 相关的奇怪现象

linux - 使用基于行分隔符的 grep 内容提取文件内容

linux - 如何为关闭的套接字捕获信号 (`SIGPIPE` )?

linux - 在linux上分析多行

python - 为什么 os.scandir() 速度变慢/如何重组大目录?

python - 权限被拒绝 (Errno 13) - wandb init - 在 docker 容器中