2

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

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

  2. 如果进程需要超过 3/2 GB 会发生什么?(我猜系统会出现一些“内存不足异常”——但有什么方法可以避免这种情况吗?)

例如 - 如果进程是需要分配多于 2/3 GB 的“Microsoft SQL Server”会发生什么

4

2 回答 2

2

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

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

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

于 2012-06-26T06:34:20.230 回答
2

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

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

于 2012-06-26T06:43:52.077 回答