一个x86 excutable可以在64位操作系统上使用多less内存?

我认为这个问题听起来很清楚,但要进一步解释:

假设我们有装有8GB内存Windows 7 x64个人电脑,64位操作系统与32位进程是我的意图

问题1:一个64位进程在这个环境中可以使用多less内存?

问题2:在这种环境下, 32位进程可以使用多less内存?

问题3:如果一个32位的进程在这个环境下只能使用2GB的内存(即使是大地址空间大小:3GB),但大多数游戏都是32位的,所以这意味着:虽然我们安装了8GB内存,例如一个游戏在任何时候只能使用2-3GB的RAM?

Solutions Collecting From Web of "一个x86 excutable可以在64位操作系统上使用多less内存?"

问题1:一个64位进程可以在这个环境中使用多少内存?

它可以使用你的所有内存

问题2:一个32位进程可以在这个环境中使用多少内存?

对于x64机器上的x86可执行文件,它默认使用2GB。 如果IMAGE_FILE_LARGE_ADDRESS_AWARE被设置,它可以使用4GBMSDN

有趣的是,如果没有设置或清除IMAGE_FILE_LARGE_ADDRESS_AWARE,x64可执行文件最多可以在x64机器上使用2GB

问题3 :(我不确定)如果一个32位进程在这个环境下只能使用2GB的ram(即使它是大地址空间AWARE:3GB),另一方面(据我所知)的游戏是32位的,所以这意味着:虽然我们已经安装了8GB的内存,那么(例如游戏)在任何时候只能使用2-3GB的内存。

没有它的4GB

在像Windows这样按需分页的受保护模式操作系统上,可用RAM的数量与进程可以使用的虚拟内存量完全无关。 限制因素是分页文件可以支持多少虚拟内存。 Windows中的分页文件的大小是在启动时和注册表设置时确定的。 从那里,当进程需要更多内存时,Windows可以根据需要增加分页文件的大小。

一个64位进程可以使用这个环境多少内存?

这是不可预知的,但至少与分页文件中的当前可用空间一样多。 你通常会得到13千兆字节。 这个空间可以突飞猛进,在程序的第二次运行中,它很可能会消耗更多的内存,因为Windows会赶上并增加分页文件。 您可以在Mark Russinovich的博客文章中看到这一点。

一个32位进程可以在这个环境中使用多少内存?

默认情况下,它是2千兆字节。 程序的EXE头中的大地址感知选项位可以将其扩展到4千兆字节。 大多数32位程序将关闭此选项位。

如果一个32位进程只能在这个环境中使用2GB内存…

它是2或4千兆字节,而不是3。并再次强调,它与RAM无关。 即使在8G RAM的机器上,LAA的32位处理也不太可能消耗4G RAM。 RAM是一个共享资源,所有进程都需要一些资源。 消耗4个演出的32位进程很可能会将其中的一部分调出。

Win32应用程序,x64操作系统:

  • 同时:
    • 最多2 GB的地址空间(有效数量由于碎片等原因而变小)
    • 如果进程二进制文件标记为/ LARGEADDRESSAWARE,则地址空间可达4 GB
  • 不一定要通过内存映射文件同时映射/不映射感兴趣的视图 :
    • 所有可用的内存,特别是4 GB和更多