我认为这个问题听起来很清楚,但为了进一步解释:
假设我们有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及以上