Win32/C++ 内存泄漏
Win32/C++ Memory Leak
我遇到了一个奇怪的内存问题。 我的 C++ 应用程序执行的过程会随着时间的推移消耗虚拟内存和物理内存。
当我关闭进程时,它消耗的任何虚拟内存都会返回到系统。 但是,消耗的大部分物理内存永远不会返回到系统。 我可以在任务管理器中查看它。
我的应用程序动态分配的任何内存都应在其进程终止时返回到系统。
我的应用程序正在执行的唯一可疑计算是反复调用 FindFirstFile/FindNextFile 来检查文件系统中的一些现有文件。 该操作总共检查大约 1000 万个文件。 在这种情况下,我相信我正确地关闭了 FindFirstFile 返回的文件句柄。
谁能推测为什么物理内存没有返回到系统?
物理内存始终在操作系统的控制之下。 无论您使用什么工具来测量物理内存使用情况,都会误导您。
可能是磁盘缓存正在增长,可能是将可用页面清零的低优先级后台线程跟不上,并且您的工具将"免费但脏"与"免费和归零以供重用"不同。
应用程序也可能在某些驱动程序或其他尚未退出的进程中触发内存泄漏。
在任何情况下,应用程序在终止后都不会继续拥有物理内存。
不要花太多精力弄清楚物理内存发生了什么,操作系统应该会处理它。你通常会兜圈子试图弄清楚,除非你对操作系统内核中发生的事情有很好的了解。我怀疑它在磁盘缓存中留下了一些东西,它会在需要空闲页面时释放它。
操作系统的目标是尽可能多地使用物理内存 - 任何未使用的东西都会被浪费。分页系统将确保任何需要物理内存的应用程序都能获得它,必要时通过交换其他内容。
它使用内存的方法之一是从磁盘缓存文件。目录也是一个文件,因此当您通读它时,它也会被缓存。
我个人一直觉得Windows做了太多的磁盘缓存。我更有可能切换到一段时间没有使用的程序,而不是访问一段时间没有使用的文件。
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存