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