程序退出时是否释放堆?

假设我将一些内存malloc成一些指针,但在程序退出之前不要释放它们。 这个内存是否会在退出时自动释放,或者内存泄漏会继续存在,直到我重新启动计算机?

答案是,最常见的。

释放堆是操作系统的责任。 虽然大多数操作系统(尤其是主流操作系统)在退出时释放堆,但对于嵌入式系统操作系统来说并不一定如此。

当您要求在堆上分配内存时,会对OS的内核空间进行系统调用以提供此内存。 此内存映射到您的进程结构,该结构由操作系统维护。 当程序退出时,操作系统会通过清理路由,关闭所有文件描述符,并将此内存标记为可用于分配给其他进程(以及其他内容)。

其中一些答案在说它依赖于编译器时是不正确的。 编译器没有说’嘿,在程序退出时释放所有这些内存’。 这没有意义,如果操作系统意外终止程序会发生什么? 不,只要为堆明确请求内存分配/释放,编译器就负责生成系统调用

内存不会被您的程序或libc释放,但在所有现代操作系统上都将被操作系统释放。 它们将内存分配给特定进程,并在进程终止时清理内存。

任何现代桌面操作系统都会在进程退出时回收资源。 没有内存泄漏。

这取决于您使用的操作系统。 显然,任何现代桌面操作系统都是为了在您的程序退出后清除,如有必要。

如果你看一下C标准,它是特定于实现的,所以你不能确定它。

但是一旦进程终止,大多数操作系统将释放内存,但在某些较小/较简单的平台上可能不是这种情况。

这不是交流问题。 如何实现堆取决于编译器以及程序退出后os的作用。 据我所知,程序退出时所有现代的os免费内存资源。 在某些嵌入式系统或驱动程序上可能不是这样。