32位进程能否在64位windows操作系统上访问更多内存?

32位进程能否在64位windows操作系统上访问更多内存?,windows,process,64-bit,Windows,Process,64 Bit,据我所知,在32位Windows上,32位进程在没有/3GB开关的情况下只能访问2GB内存,而操作系统由于其自身的可怕原因占用了部分内存。这似乎符合我的经验,因为我们有一个应用程序,当它达到大约1.2-1.5 GB的RAM时会崩溃,而没有内存异常,即使仍然有足够的内存可用 将这个32位的应用程序移动到64位的Windows,允许它访问超过1.5 GB的空间吗?应用程序本身是否必须升级到64位?您的应用程序将受到指针大小的限制,例如32位 如果你的应用程序要访问更多内存,那么你需要某种分段内存体系

据我所知,在32位Windows上,32位进程在没有/3GB开关的情况下只能访问2GB内存,而操作系统由于其自身的可怕原因占用了部分内存。这似乎符合我的经验,因为我们有一个应用程序,当它达到大约1.2-1.5 GB的RAM时会崩溃,而没有内存异常,即使仍然有足够的内存可用


将这个32位的应用程序移动到64位的Windows,允许它访问超过1.5 GB的空间吗?应用程序本身是否必须升级到64位?

您的应用程序将受到指针大小的限制,例如32位


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

较新版本的Visual Studio有一个新标志,使32位应用程序具有“大地址空间感知”。基本上,它所做的是说,如果它加载在64位版本的windows上,那么它将获得4GB(32位指针的限制)。这当然比32位版本的windows上的2或3 GB要好。见:

最值得注意的是它说:

内存和地址空间的限制 不同的平台、操作系统、, 以及 图像\u文件\u大\u地址\u感知值 加载的_图像结构和 正在使用4GB的调谐(4GT)。 已设置图像\u文件\u大\u地址\u感知 或通过使用 /LargeAddressware链接器选项


另请参见:

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

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

要使其工作,您需要以下各项:

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

您的意思是,它可以访问32位指针所建议的全部4GB吗?如果不做一些工作,它肯定不能处理超过4GB的数据,但我很想知道它是否可以使用超过32位Windows下所能使用的数据。在32位代码运行时,32位指针不会转换为64位。WOW64仅在转换64位代码时才会涉及。