如果某个进程需要分配超过2 GB的内存,会发生什么?

时间:2012-06-26 06:31:31

标签: .net windows memory-management internal

据我所知 - Windows中的任何进程都会获得2 GB的虚拟内存地址空间(在某些情况下为3 GB)以供分配使用。

  1. 在什么情况下,该过程将获得3 GB而不是2 GB? 是否有一些方法让应用程序开发人员“要求”操作系统分配超过2/3 GB的虚拟地址空间?

  2. 如果流程需要超过3/2 GB,会发生什么? (我想系统会通过一些'内存不足' - 但有没有办法避免这种情况?)

  3. 例如 - 如果进程是“Microsoft SQL Server”需要分配的内容超过2/3 GB,会发生什么

2 个答案:

答案 0 :(得分:2)

  

据我所知 - Windows中的任何进程都会获得2 GB的虚拟内存地址空间(在某些情况下为3 GB)以供分配使用。

不,在x64上,虚拟内存空间要大得多,这就是为什么像SQL Server这样的工具通常在x64上运行得最好。

请注意,在当前的.NET中,单个对象(字符串,数组等)的限制为2GB,但这看起来很快就会消失(允许大量对象)。见gcAllowVeryLargeObjects

答案 1 :(得分:2)

32位进程具有4 GB的地址空间,通常为硬件保留1 GB,为Windows保留1 GB。使用switch in boot.ini可以使Windows为进程提供3 GB的地址空间。

64位进程具有16 PB的地址空间。我不知道保留了多少,但可用的地址空间远大于2或3 GB。