我有一个 32 位应用程序,由一个 EXE 和多个 DLL 组成。 EXE 是用/LARGEADDRESSAWARE
标志设置。所以我预计在 64 位操作系统上我应该获得 4 GB 的用户地址空间。但在某些 64 位 Win 7 系统上,我只能获得 2 GB 的用户地址空间。
如果重要的话,物理内存是 8 GB。这种行为的原因可能是什么?
浏览MSDN后,我发现了以下内容:
On http://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx(该页面为MEMORYSTATUSEX
这是由GlobalMemoryStatusEx
(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx) ) 的描述ullTotalVirtual
is:
对于 x86 处理器上的大多数 32 位进程,该值约为 2 GB;对于在启用了 4 GB 调整的系统上运行的大地址感知的 32 位进程,该值约为 3 GB。
4GB调优页面为:http://msdn.microsoft.com/en-us/library/windows/desktop/bb613473(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/bb613473(v=vs.85).aspx它说的是这样的:
在 64 位版本的 Windows 上,标有 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志的 32 位应用程序具有 4 GB 的可用地址空间。
Windows Server 2003 的 Itanium 版本:在 SP1 之前,32 位进程只有 2 GB 的可用地址空间。
此外,内存限制页(http://msdn.microsoft.com/en-us/library/aa366778.aspx#memory_limits http://msdn.microsoft.com/en-us/library/aa366778.aspx#memory_limits)如果您想确定系统支持的总内存,可以派上用场。
然而真正有用的信息来自 Mark Russinowich 的博客:http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx
虽然 4GB 是 32 位客户端 SKU 的许可限制,但有效限制实际上较低,并且取决于系统的芯片组和连接的设备。原因是物理地址映射不仅包括 RAM,还包括设备内存,x86 和 x64 系统映射 4GB 地址边界以下的所有设备内存,以保持与不知道如何处理的 32 位操作系统兼容地址大于 4GB。
所以结论是,是的,这可能取决于系统的配置。也许您可以用表格来完成您的问题,其中包含每个系统上获得的内存量以及一些重要的系统配置设置,我们可能会在这种情况下发现一种模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)