c++ - 为什么我的应用程序在 Windows 10 上使用更多内存?
问题描述
我有一个使用 Visual Studio 2010 编译的 C++ 应用程序。这是一个大型遗留应用程序,具有多个线程服务于套接字、数据库连接、RV 市场数据流等。
在 Windows 7 上,该应用程序运行良好,正常使用时消耗大约 700MB 内存,一旦启动并运行,波动很小。
当复制到我的 Windows 10 机器上时,完全相同的二进制文件会在启动后大约 15 秒内耗尽内存。
我使用 SysInternals procexp64.exe 来监控内存使用情况。在 Win7 机器上,我看到虚拟内存使用量徘徊在 700MB 左右。在 Win10 机器上,虚拟内存使用率稳步攀升,直到在启动后几秒钟内达到 2GB 标记,然后抛出内存不足异常。我在链接器设置中设置了 LargeAddressAware 标志,然后它的行为方式相同,当它达到 4GB 时抛出内存不足异常。
Win7 和 Win10 平台之间的内存分配有什么不同可以解释这个问题?
解决方案
我设法找到了这个应用程序在我的 Windows 10 工作站上内存不足的原因。
是的,该应用程序是未定义行为、未初始化变量和所有其他无法形容的事物的温床。但它已有 20 年历史,包含 500 kloc 和数千个文件,因此无法修复所有这些文件。
它在我的 Windows 7 机器上运行良好。它确实有一个内存不足的处理程序集。我在里面放了一个断点。当它停止时,我查看了已加载的模块,并将它们与我的 Windows 7 机器上的模块进行了比较。
一个明显的区别是...verifier.dll。事实证明,我得到的这个 Windows 10 工作站并不是新的,并且通过 gflags 启用了页面堆分析。这使用的额外内存导致了问题。使用 gflags.exe 关闭页面堆分析使我的内存不足问题消失了。
推荐阅读
- laravel - 无法在 Windows 10 上安装 Laravel 作曲家
- swift - Swift:使具有相同“形状”的两种类型符合通用协议
- c++ - 为什么我的 while 循环允许错误的尝试次数
- laravel - Laravel 视图加载两次以显示评论
- python - python没有正确显示可执行输出
- r - D3 桑基图:改变节点位置
- keras - 1D CNN、2D CNN 和 3D CNN 的输入形状之间的差异
- javascript - 没有数组时如何使用数组解构?
- css - react-native 中与 *main-axis* 等效的 `alignSelf` 是什么?
- ios - 主线程与后台线程上的 CompletionHandler 行为