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

时间:2009-05-14 15:58:58

标签: c++ c memory operating-system

  

重复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.

7 个答案:

答案 0 :(得分:7)

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

所有这些时刻都会及时消失...... 喜欢在雨中流泪
- Roy Barty在 Blade Runner

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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

相关问题