x86可执行程序在64位操作系统上可以使用多少内存



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

假设我们有Windows 7 x64 PC与8GB内存安装在它;(64位操作系统与32位进程是我的意图)

问题1:在这种环境下,64位进程可以使用多少内存?

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

问题3:如果一个32位进程在这个环境中只能使用2GB的内存(即使它是大的地址空间感知:3gb),然而大多数游戏都是32位的,那么这是否意味着:尽管我们安装了8gb的内存,但一个游戏在任何给定的时间只能使用2-3gb的内存?

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

它可以使用所有的内存

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

对于x64机器上的x86可执行文件,它默认消耗2GB。如果设置了IMAGE_FILE_LARGE_ADDRESS_AWARE,则可以使用4GB MSDN.

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

问题3:(我不确定)如果一个32位进程在这个环境中只能使用2GB的内存,(即使它是大地址空间意识:3gb),另一方面(据我所知)大多数游戏是32位的;,所以这是否意味着:虽然我们有8gb的ram安装,(例如游戏)只能使用2-3gb的ram在任何给定的时间????

No its 4GB

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

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

这是不可预测的,但至少与分页文件中的当前可用空间一样多。你通常会得到大约13g的内存。这个空间可以快速增长,在第二次运行程序时,它可能会消耗更多的内存,因为Windows会赶上并增加分页文件。你可以在Mark Russinovich的博客文章中看到这一点。

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

默认值是2gb。程序的EXE头文件中的大地址感知选项位可以将其扩展到4gb。大多数32位程序会关闭此选项位。

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

它不是2 gb就是4 gb,不是3 gb。再次强调,这与内存无关。即使在一台有8g RAM的机器上,一个32位的LAA进程非常不可能消耗4g RAM。RAM是一种共享资源,所有进程都需要它的一部分。一个32位的进程,如果占用4gig,很可能会有一部分内存被分页。

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

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

    最新更新