32位进程可以在64位Windows操作系统上访问更多内存吗?

时间:2009-02-20 17:45:57

标签: windows process x86 64-bit

根据我的理解,32位进程只能在没有/ 3GB开关的情况下在32位窗口上访问2GB内存,并且操作系统会根据自己的恶魔原因占用一些内存。这似乎与我的经验相吻合,因为我们有一个应用程序崩溃,当它达到大约1.2-1.5 GB的内存异常时,即使仍然有足够的可用内存。

我的问题是,将这个32位应用程序移动到64位窗口是否允许它现在可以访问超过1.5GB左右的内存?或者应用程序本身是否必须升级到64位?

4 个答案:

答案 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链接器选项。

另见:http://msdn.microsoft.com/en-us/library/wz223b1z.aspx

答案 1 :(得分:4)

是的,在适当的情况下,Windows上的32位进程可以访问完整的4GB内存,而不是通常限制为2Gb的内存。

要使其正常工作,您需要以下内容:

  • 应用必须在64位操作系统上运行
  • 必须使用/ LARGEADDRESSAWARE标志编译应用程序。
  • 应该测试应用程序以确保它在这种情况下实际上正常工作。 ;)(具体来说,依赖指向2GB边界以下地址的所有指针的代码在这里显然不起作用)

答案 2 :(得分:1)

您的应用程序将受指针大小限制,在您的示例中为32位。

如果您的应用程序要访问更多内存,那么您需要某种分段内存架构,就像我们在16位日内使用16位指针和偏移来访问完整的32位内存空间一样。

答案 3 :(得分:1)

WOW64允许在64位Windows上使用32位Windows应用程序,将32位指针转换为真正的64位指针。实际上,32位寻址应允许访问4GB内存。