如果Windows应用程序在映像头中设置了IMAGE_FILE_LARGE_ADDRESS_AWARE
(通过/largeaddressware compiler标志),则通常允许32位应用程序使用超过2GB的内存(仅当32位操作系统在boot.ini中设置了3GB开关时才有意义)。有关更多信息,请参阅MSDN article /3GB。
我的问题是,如果您在没有3GB交换机的系统上运行此应用程序,会发生什么情况。它只是被忽视了吗?或者,由于用户空间只有2GB可用,应用程序是否会尝试使用3GB堆并获取内存不足错误?
我一直听说2GB用户空间系统忽略了LargeAddressware开关,但找不到任何官方的微软文档。
事先谢谢。
最佳答案
基本上,IMAGE_FILE_LARGE_ADDRESS_AWARE
告诉系统,“我知道高位集的地址不是负数,可以处理它们”。
如果系统准备提供2GB以上的用户模式地址,那么它将提供。如果系统不准备提供这些地址(例如,一个没有/3GB设置的32位Windows操作系统),则进程无论如何都无法获取这些地址,但不会造成任何危害。
还要注意,如果图像设置了IMAGE_FILE_LARGE_ADDRESS_AWARE
位,它将可以访问Win64系统上超过2GB的地址空间,而Win64系统不支持(或不需要)3GB开关。32位应用程序将获得接近4GB的地址空间,64位应用程序将获得巨大的地址空间-7TB到8TB,具体取决于平台(默认情况下,64位构建设置该位)。
http://msdn.microsoft.com/en-us/library/aa366778.aspx#memory_limits
关于winapi - IMAGE_FILE_LARGE_ADDRESS_AWARE和3GB OS Switch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/586826/