【发布时间】:2017-01-21 07:42:32
【问题描述】:
我想在 C# 中调用 Windows 的 GetSystemInfo() API 函数来检索 maximumApplicationAddress 和 minimumApplicationAddress 以扫描计算机的内存。
我写了一个简单的程序来输出这些值:
SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);
Console.WriteLine("Min Address: {0:X}", sys_info.minimumApplicationAddress.ToUInt64());
Console.WriteLine("Max Address: {0:X}", sys_info.maximumApplicationAddress.ToUInt64());
当我通过调试器(使用开始按钮)运行这个程序时,它会显示:
Min Address: 10000
Max Address: 7FFEFFFF
但是当我构建它并运行可执行文件时,它会显示:
Min Address: 10000
Max Address: FFFEFFFF
Max Addresses 之间的区别对我来说有点奇怪。你能解释一下原因吗?
【问题讨论】:
-
第一个7FFEFFFF是2gb,第二个是4gb。根据this,它可能来自:“64 位操作系统上的 32 位:2 GB,除非设置为大地址空间感知,在这种情况下为 4 GB。” -- 所以也许调试器正在使用非大地址感知代码,但构建版本是?
-
是的,你是对的。根据链接的问题,运行
editbin /LARGEADDRESSAWARE:NO Program.exe使构建的程序像调试器一样运行