【发布时间】:2020-04-01 13:32:14
【问题描述】:
我有一个使用 Visual Studio 2010 编译的 C++ 应用程序。这是一个大型遗留应用程序,具有多个线程服务于套接字、数据库连接、RV 市场数据流等。
在 Windows 7 上,该应用程序运行良好,正常使用时消耗大约 700MB 内存,一旦启动并运行,波动很小。
复制到我的 Windows 10 机器上的完全相同的二进制文件在启动后大约 15 秒内耗尽内存。
我使用 SysInternals procexp64.exe 来监控内存使用情况。在 Win7 机器上,我看到虚拟内存使用量徘徊在 700MB 左右。在 Win10 机器上,虚拟内存使用率稳步攀升,直到在启动几秒钟内达到 2GB 标记,然后抛出内存不足异常。我在链接器设置中设置了 LargeAddressAware 标志,然后它的行为方式相同,当它达到 4GB 时抛出内存不足异常。
Win7 和 Win10 平台之间的内存分配有何不同可以解释这个问题?
【问题讨论】:
-
这可能是代码中某处未定义的行为。没有minimal reproducible example 就很难或不可能提供帮助
-
也许您的程序中总是存在错误,现在将应用程序移动到不同的操作系统会暴露该错误。无论是那个,还是你的代码隐式或显式地依赖于操作系统的某些“默认”行为,而在 Win 10 上,这种假设不再适用。
-
我怀疑你们俩都是对的。该程序可能充斥着多年未被注意到的未定义行为和错误。
-
在您的代码中可能未初始化的变量在 Windows 7 下运行时似乎总是“工作”。还要确保您检查了所有 Windows API 调用(如果您的应用进行此类调用)以确保他们返回该功能已成功完成。很多时候,不检查这些错误的代码只是假设函数可以工作,但是当程序必须在不同的操作系统(甚至不同的机器)上运行时,调用会返回一个未被检测到的错误。因此,假设一切正常,它会将您的程序放入代码的那部分。
标签: c++ windows-10 windows-7-x64