如果Windows应用程序IMAGE_FILE_LARGE_ADDRESS_AWARE
在映像头中具有该集(通过/ LARGEADDRESSAWARE编译器标志),则通常允许32位应用程序使用超过2GB的内存(仅在32位操作系统已设置时才有意义) boot.ini中的3GB开关).有关详细信息,请参阅MSDN文章/ 3GB.
我的问题是,如果您在没有3GB开关设置的系统上运行此应用程序会发生什么.它被忽略了吗?或者应用程序是否会尝试使用3GB堆并获取内存不足错误,因为用户空间只有2GB可用?
我一直听到有消息称LARGEADDRESSAWARE交换机在2GB用户空间系统中被忽略,但在此无法找到任何官方的Microsoft文档.
提前致谢.
基本上IMAGE_FILE_LARGE_ADDRESS_AWARE
告诉系统,"我知道高位设置的地址不是负数,并且可以处理它们".如果系统准备提供超过2GB的用户模式地址,那么它将会.如果系统不准备提供这些地址(即,没有/ 3GB设置的32位Windows操作系统),则该过程无论如何都无法获取这些地址 - 但不会造成任何损害.
另请注意,如果图像具有该IMAGE_FILE_LARGE_ADDRESS_AWARE
位设置,则它将在Win64系统上访问超过2GB的地址空间,这不支持(或不需要)/ 3GB开关.32位应用程序将获得接近4GB的地址空间,64位应用程序将获得巨大的地址空间 - 7TB到8TB,具体取决于平台(64位构建默认设置该位).
http://msdn.microsoft.com/en-us/library/aa366778.aspx#memory_limits
如果您可以调用它,则忽略该开关.曾经,微软实际上设法提出了一个描述性的名称.
旗帜正是它所说的.此映像文件知道存在大地址.也就是说,如果指针位于2GB边界之上,它就不会崩溃.
就这样.操作系统不必以任何方式处理特殊处理.它只是表明如果操作系统能够提供超过2GB的内存,这个过程可以处理它而不会崩溃.你可以制作一个简单的hello world应用程序,它从不使用超过1.5MB,并且仍然设置了这个标志.它并不意味着"我想使用3GB内存",它意味着"当我请求内存时,我不在乎它是否高于或低于2GB边界".
因此,由于该标志不需要操作系统做任何特殊操作,因此操作系统根本不会做任何特殊操作,如果它没有什么特别之处.