为什么 64 位 cpu 不存在高端内存?

Why does high-memory not exist for 64-bit cpu?

虽然我试图了解 32 位 cpu 和 Linux 的高内存问题,但为什么 64 位 cpu 没有 high-memory problem

特别是虚拟内存划分为内核space和用户space是如何改变的,使得64位不存在高端内存的需求cpu?

谢谢。

使用 32 位地址,您只能寻址 2^32 字节的内存 (4GB)。所以如果你有更多,你需要用一些特殊的方式来解决它。使用 64 位地址,您可以毫不费力地寻址 2^64 字节的内存,这个数字比地球上存在的所有内存都要大。

该位数是指处理器的字长。其中,字长是您机器上内存地址的大小。内存地址的大小影响可以唯一引用的字节数。所以做一些简单的数学运算,我们发现在 32 位系统上最多存在 2^32 = 4294967296 个内存地址,这意味着您有大约 4GB RAM 的数学限制。

然而,在 64 位系统上,您有 2^64 = 1.8446744e+19 个内存地址可用。这意味着您的计算机理论上可以引用近 20 艾字节的 RAM,这比计算历史上任何人所需要的 RAM 都要多。

32位系统只能寻址4GB内存。在 Linux 中,这被分成 3GB 的用户 space 和 1GB 的内核 space。这 1GB 有时是不够的,因此内核可能需要映射和取消映射内存区域,这会导致相当大的性能损失。内核 space 是 "high" 1GB,因此名称为 "high memory problem".

64 位系统可以解决 巨大 内存量 - 16 EB - 因此不会出现此问题。