Windows 7清理C ++内存泄漏?

为了好玩,我创build了一个创build大约5GB内存的项目,并没有删除它。 只要应用程序正在运行,“内存泄漏”就在那里。 第二个我closures我的应用程序的内存在2秒钟内恢复正常,就好像我的程序从未运行。 所以这个问题必须要问。

Windows 7在完成后是否清理坏程序的内存泄漏?

是否所有的Windows版本都这样做?

Linux和Mac OS X环境能做到这一点吗?

Solutions Collecting From Web of "Windows 7清理C ++内存泄漏?"

程序终止时,操作系统将回收先前分配给它的所有内存。 清理内存泄漏可能是一个可感知的副产品,但操作系统实际上并没有这样看待。 它不知道该程序泄漏了内存,只是它已经分配了内存。

一旦应用程序运行的进程退出,操作系统就会回收分配给进程的所有内存。

对于所有操作系统而言,这通常是正确的,而不仅仅是Windows 7或Windows。

请注意,您可能会观察到其他泄漏资源(如文件句柄等)的不同行为,通常操作系统不会收回这些资源。 所以, 通常 (是的,有例外)是一个很好的做法,让你自己的应用程序清除混乱(释放分配的资源),而不是委托给操作系统。

程序不仅管理内存,而且还管理操作系统。 在程序存在之后,它将回收所有分配给程序的内存。 它不会干扰程序的执行(分页和交换除外)。 这种对操作系统内存的控制可以帮助操作系统从内存泄漏到某一点。

内存管理是管理计算机内存的行为。 内存管理的基本要求是提供方法,根据请求动态分配内存部分到程序中,并在不再需要时将其释放以供重用。 这对计算机系统是至关重要的。

当可用内存的百分比下降到5%以下时,BSD Unix通常开始回收内存,并继续回收直到可用内存百分比达到7%

  1. 是的(Windows 7会在程序退出时回收分配给程序的所有内存,无论它如何退出 – 受控制或崩溃)。
  2. 是的(对于任何版本的Windows,最近都还在运行)。
  3. 是的(Unix,Linux,Mac OS X,BSD都会在程序退出时回收所有分配给程序的内存,不管它如何退出)。

一些旧的操作系统在程序退出时没有重新获取资源。 我相信AmigaOS是一个; 另一个,我相信,是旧的Mac OS(Mac OS 9及更早版本)。 然而,基本上所有真正的多任务系统在分配到的进程退出时都必须回收内存(和一般资源)。

对于所有操作系统来说都不是这样,例如,我不相信WinXP会以这种方式行事。

虽然对于大多数现代操作系统,现在是这样的情况。 我相信所有当前版本的Linux,Windows和MacOS都这样做。

对于Windows,我很确定它是在Windows Vista中引入的。 当时这是一个相当令人兴奋的改进,因为那里有很多dodgey窗口应用程序没有很好地管理他们的记忆。 当时这对windows来说是一个很大的胜利,但是到了晚会(像往常一样),Linux和MacOS早已经在做这件事了。

话虽如此,我相信你很感激你仍然需要在你的应用程序中正确地管理你的内存,而不是简单地依靠你的操作系统来清理你的内存。 应用程序在运行时也需要高效且可预测的内存使用情况。