让我们说,例如:
int main()
{
char* test = new char[50000];
return 0;
}
程序完成后分配的内存会发生什么变化?是否立即获得其他应用程序的释放?或者也许过了一段时间?或许它永远丢失在系统中?或者它是否被交换到磁盘永远不会返回到RAM?或者可能是完全不同的东西?
我想知道主要3操作系统会发生什么:Windows(XP及以上,如果有任何差异),Linux,Mac OS X.
答案 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状态)。