据我所知,一个32位进程只能在没有/ 3GB开关的32位窗口上访问2GB的内存,而且由于自身恶魔的原因,某些内存被操作系统占用。 这似乎与我的经验相结合,因为我们有一个应用程序,当它达到1.2 – 1.5 GB的内存不足,内存不足的情况下崩溃的应用程序,即使仍然有大量的内存可用。
我的问题是,将这个32位应用程序移动到64位窗口允许访问超过1.5GB左右的内存,现在可以吗? 或者应用程序本身必须升级到64位?
较新版本的Visual Studio有一个新的标志,使32位应用程序“大地址空间感知”。 基本上它是这样说的,如果它加载在一个64位版本的Windows上,那么它将获得4GB(32位指针的限制)。 这当然比在32位版本的Windows上获得的2或3 GB更好。 请参阅http://msdn.microsoft.com/en-us/library/aa366778.aspx :
最值得注意的是它说:
内存和地址空间的限制因平台,操作系统以及LOADED_IMAGE结构的IMAGE_FILE_LARGE_ADDRESS_AWARE值和4千兆字节调整(4GT)是否正在使用而有所不同。 使用/ LARGEADDRESSAWARE链接器选项设置或清除IMAGE_FILE_LARGE_ADDRESS_AWARE。
另请参阅: http : //msdn.microsoft.com/en-us/library/wz223b1z.aspx
是的,在正确的情况下,Windows上的32位进程可以访问完整的4GB内存,而不是通常所限制的2Gb。
为了这个工作,你需要以下内容:
你的应用程序将受到指针大小的限制,例如32位。
如果您的应用程序要访问更多的内存,那么您将需要某种分段内存体系结构,就像我们在16位天使用16位指针和偏移量来访问完整的32位内存空间那样。
WOW64允许在64位Windows上使用32位Windows应用程序,将32位指针转换为真正的64位指针。 而实际上32位寻址应该允许访问4GB的内存。