Windows 7清理C++内存泄漏
Windows 7 cleans up C++ memory leaks?
为了好玩,我创建了一个项目,创建了大约5GB的内存,但没有删除它。只要应用程序正在运行,"内存泄漏"就存在。当我关闭应用程序的那一刻,内存在2秒内恢复正常,就好像我的程序从未运行过一样。因此,必须提出问题。
Windows 7会在坏程序完成后清除内存泄漏吗?
所有Windows版本都这样做吗?
Linux和Mac OS X环境会这样做吗?
当程序终止时,操作系统会回收以前分配给它的所有内存。清理内存泄漏可能是这方面的副产品,但操作系统实际上并没有这么看。它不知道程序已经泄漏了内存,只知道它已经分配了内存。
一旦运行应用程序的进程退出,操作系统就会回收分配给该进程的所有内存。
这通常适用于所有操作系统,而不仅仅是Windows 7或Windows。
请注意,您可能会观察到其他泄漏资源(如文件句柄等)的不同行为,通常操作系统不会回收这些资源。因此,通常(是的,也有例外)是一种很好的做法,让您自己的应用程序清除它造成的混乱(释放分配的资源),而不是将其委托给操作系统。
程序不仅管理内存,还管理操作系统。在程序存在后,它会回收分配给程序的所有内存。它不会干扰程序的执行(除了分页和交换)。这种对操作系统内存的控制有助于操作系统在一定程度上避免因内存泄漏而崩溃。
内存管理是管理计算机内存的行为。这个内存管理的基本要求是提供根据程序的请求动态地将部分存储器分配给程序,并在不再需要时将其释放以供重复使用。这对于计算机系统。
BSD Unix通常在可用内存百分比降至5%以下时开始回收内存,并继续回收,直到可用内存百分比达到7%。
- 是(Windows 7会在程序退出时回收分配给程序的所有内存,无论程序如何退出(在控制下或崩溃时)
- 是(适用于任何更新到可以继续运行的Windows版本)
- 是(Unix、Linux、Mac OS X、BSD都会在程序退出时回收分配给程序的所有内存,无论程序如何退出)
一些旧的操作系统在程序退出时没有重新获取资源。我相信AmigaOS就是其中之一;另一个,我相信,是旧的Mac操作系统(Mac OS 9及更早版本)。然而,当分配给它的进程退出时,几乎所有真正的多任务系统都必须回收内存(以及一般的资源)。
并非所有操作系统都是这样,例如,我不认为WinXP会有这种行为。
尽管对于大多数现代操作系统来说,现在就是这样。我相信所有当前版本的Linux、Windows和MacOS都能做到这一点。
对于windows,我确信它是在windows Vista中引入的。当时,这是一个相当令人兴奋的改进,因为有很多躲避窗口应用程序没有很好地管理内存。当时,这对windows来说是一个巨大的胜利,但它来得很晚(像往常一样),因为Linux和MacOS早就已经在这么做了。
话虽如此,我相信你会明白,你肯定仍然需要在应用程序中正确管理内存,而不是简单地依靠你的操作系统来清理。应用程序在运行时的内存使用也需要高效且可预测。
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏