为什么 32 位 Windows 强加 2 GB 进程地址空间限制,而 64 位 Windows 强加 4GB 限制?

puk*_*puk 5 memory operating-systems

我明白了2^32 = 4,294,967,296,2GB 用于操作系统,2GB 用于进程,但为什么 64 位操作系统只提供 4GB 的地址空间?如果它不能2^64 = 18,446,744,073,709,551,615在OS和过程之间平分秋色,当是很多超过4 GB?

par*_*mar 10

如果您查看Windows 版本的内存限制

x64 用户模式虚拟地址空间的限制不是4GB但至少8TB

一些证明8Tb限制合理的解释

默认情况下,32 位 exe 也仅限2GB于 64 位操作系统,除非它被调整IMAGE_FILE_LARGE_ADDRESS_AWARE

  • 请注意,64 位进程必须在其 PE 标头中设置 IMAGE_FILE_LARGE_ADDRESS_AWARE 以获得那么多用户模式虚拟地址空间,否则它们像 32 位进程一样被限制为 2 GB。 (3认同)

Dav*_*rtz 5

2^32 (4GB) 是一次可以使用 32 位指针寻址的最大地址空间量。所以 32 位进程必然被限制在 4GB 的地址空间,因为它使用 32 位指针,而不管操作系统如何。

请注意,这纯粹是对进程可以一次映射到其地址空间的虚拟内存的限制。