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

Gha*_*nPL 12 c c++ memory operating-system

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

比方说,举个例子:

int main()
{
  char* test = new char[50000];
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Con*_*lls 7

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

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


Dan*_*tep 2

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