首页 > 解决方案 > 为什么我的应用程序在 Windows 10 上使用更多内存?

问题描述

我有一个使用 Visual Studio 2010 编译的 C++ 应用程序。这是一个大型遗留应用程序,具有多个线程服务于套接字、数据库连接、RV 市场数据流等。

在 Windows 7 上,该应用程序运行良好,正常使用时消耗大约 700MB 内存,一旦启动并运行,波动很小。

当复制到我的 Windows 10 机器上时,完全相同的二进制文件会在启动后大约 15 秒内耗尽内存。

我使用 SysInternals procexp64.exe 来监控内存使用情况。在 Win7 机器上,我看到虚拟内存使用量徘徊在 700MB 左右。在 Win10 机器上,虚拟内存使用率稳步攀升,直到在启动后几秒钟内达到 2GB 标记,然后抛出内存不足异常。我在链接器设置中设置了 LargeAddressAware 标志,然后它的行为方式相同,当它达到 4GB 时抛出内存不足异常。

Win7 和 Win10 平台之间的内存分配有什么不同可以解释这个问题?

标签: c++windows-10windows-7-x64

解决方案


我设法找到了这个应用程序在我的 Windows 10 工作站上内存不足的原因。

是的,该应用程序是未定义行为、未初始化变量和所有其他无法形容的事物的温床。但它已有 20 年历史,包含 500 kloc 和数千个文件,因此无法修复所有这些文件。

它在我的 Windows 7 机器上运行良好。它确实有一个内存不足的处理程序集。我在里面放了一个断点。当它停止时,我查看了已加载的模块,并将它们与我的 Windows 7 机器上的模块进行了比较。

一个明显的区别是...verifier.dll。事实证明,我得到的这个 Windows 10 工作站并不是新的,并且通过 gflags 启用了页面堆分析。这使用的额外内存导致了问题。使用 gflags.exe 关闭页面堆分析使我的内存不足问题消失了。


推荐阅读