为了好玩,我创建了一个创建了大约5 GB内存并且没有删除它的项目。只要应用程序正在运行,就会出现“内存泄漏”。第二个我关闭我的应用程序2秒内的内存恢复正常,好像我的程序从未运行。所以必须提出问题。
Windows 7在完成后会清除坏程序的内存泄漏吗?
所有Windows版本都这样做吗?
Linux和Mac OS X环境会这样做吗?
答案 0 :(得分:16)
当程序终止时,操作系统将回收先前已分配给它的所有内存。清理内存泄漏可能是这种情况的副产品,但操作系统实际上并没有这样看待它。它不知道程序泄漏了内存,只是它已经分配了它。
答案 1 :(得分:9)
一旦您的应用程序运行的进程退出,操作系统将回收分配给该进程的所有内存。
对于所有操作系统而言,这通常都适用于Windows 7或Windows。
请注意,您可能会发现其他泄漏资源(如文件句柄等)的不同行为,通常OS不会回收这些资源。因此,通常(是的,有例外)是一种很好的做法,可以让您自己的应用程序清除它所产生的混乱(解除分配已分配的资源),而不是将其委托给操作系统。
答案 2 :(得分:1)
一些旧操作系统在程序退出时没有重新获取资源。我相信AmigaOS就是其中之一;另一个,我相信,是旧的Mac OS(Mac OS 9及更早版本)。但是,基本上所有真正的多任务系统都必须在分配它的进程退出时回收内存(和一般资源)。
答案 3 :(得分:1)
程序不仅可以管理内存,还可以管理操作系统。并且它在存在之后回收分配给程序的所有内存。它不会干扰程序的执行(除了分页和交换之外)。对操作系统内存的这种控制有助于操作系统从内存泄漏崩溃到某一点。
内存管理是管理计算机内存的行为。该 内存管理的基本要求是提供方法 根据请求动态地将部分内存分配给程序, 并在不再需要时释放它以便重复使用。这至关重要 计算机系统。
当可用内存百分比降至5%以下并继续回收直到可用内存百分比达到7%时,BSD Unix通常会开始回收内存
答案 4 :(得分:-2)
所有操作系统都不是这种情况,例如,我不相信WinXP会这样做。
虽然对于大多数现代操作系统来说,情况就是如此。我相信所有当前版本的Linux,Windows和MacOS都可以做到这一点。
对于Windows,我很确定它是在Windows Vista中引入的。当时这是一个相当令人兴奋的改进,因为那里有很多躲闪的窗口应用程序没有很好地管理它们的内存。当时它是Windows的一大胜利,但它已经来晚了(像往常一样),因为Linux和MacOS很久以前就已经这么做了。
话虽如此,我确信你明白你仍然需要在你的应用程序中正确管理你的内存,而不是简单地依靠你的操作系统来清理你。应用程序在运行时也需要高效且可预测的内存使用。