在程序结束后没有释放的内存会发生什么?

重复 : 当你在malloc之后没有释放时真正发生了什么?

比方说,例如:

int main() { char* test = new char[50000]; return 0; } 

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

我想知道主要3操作系统会发生什么:Windows(XP及以上,如果有任何差异),Linux,Mac OS X.

请参阅: 在malloc之后没有释放时真的会发生什么?

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

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

所有这些时刻都会及时消失……
喜欢在雨中流泪
Blade Runner中的 Roy Batty

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

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

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

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

至于我记得当我使用各种版本的Unix时,它对所有操作系统都是一样的。

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