程序结束后未释放的内存会怎样? [复制]

Posted

技术标签:

【中文标题】程序结束后未释放的内存会怎样? [复制]【英文标题】:What happens to memory that is not freed after end of program? [duplicate] 【发布时间】:2010-10-26 05:44:08 【问题描述】:

重复:What REALLY happens when you don’t free after malloc?

比如说:

int main()

  char* test = new char[50000];
  return 0;

程序完成后分配的内存会发生什么?它会立即为其他应用程序释放吗?或者也许在一段时间后?或者它可能永远丢失在系统中?或者它是否被交换到磁盘永远不会返回到 RAM?或者可能是完全不同的东西?

我想知道主要 3 种操作系统会发生什么:Windows(XP 及更高版本,如果有任何差异)、Linux、Mac OS X。

【问题讨论】:

【参考方案1】:

见:What REALLY happens when you don't free after malloc?

【讨论】:

【参考方案2】:

在任何带有 MMU 的操作系统(包括 Unix、Linux、OSX 和 Windows NT 系列)上,该进程都有一个数据结构,用于为 MMU 设置页面映射。当进程终止时,该映射被释放,页面被添加到操作系统的空闲池中。

在非受保护内存的 O/S 平台(如 DOS 或某些实时操作系统)上,可能需要显式释放内存,如果没有正确整理,O/S 池可能会泄漏内存。

【讨论】:

【参考方案3】:

所有这些时刻都会随着时间流逝...... 像雨中的泪水 -- 银翼杀手

中的罗伊·巴蒂

这在很大程度上取决于操作系统。大多数操作系统会为您释放内存,有些则不会。如果您现在为桌面操作系统开发,那么您可以确定内存将被释放。在嵌入式系统或移动电话中情况并非如此,在这种情况下,内存实际上会丢失,直到操作系统下次重新启动。

【讨论】:

【参考方案4】:

它消失了,就像操作系统清理它一样。程序要求的任何内存,操作系统都知道,所以当程序关闭时,它使用的任何内存都会被释放,并可供其他程序使用。我相信它会立即可用。

【讨论】:

【参考方案5】:

一旦使用它的进程完成,操作系统应该将其回收为系统内存。

【讨论】:

【参考方案6】:

在 Windows 中,当程序关闭时,操作系统会释放内存。如果是大量内存,可能需要一些时间。

据我所知,当我使用各种风格的 Unix 时,所有操作系统都是一样的。

【讨论】:

【参考方案7】:

答案当然取决于操作系统,但通常操作系统会在程序终止时清理并清除所有剩余的分配/映射内存。在 Linux 的情况下,清理将在进程终止(进入 Z 状态)之前完成。

【讨论】:

以上是关于程序结束后未释放的内存会怎样? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

对等体断开连接后未释放SSL内存

安卓手机怎样释放内存?

目标c-关闭集合视图控制器后未释放常驻内存和脏内存

c++的程序结束后,还有可能一部分数据留在物理内存,没有被释放吗?

linux采用啥方法实现内存的分配和释放

c语言是在声明变量的同时,分配内存的吗?程序结束运行了,内存会释放吗?