为什么 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 - 因此不会出现此问题。
虽然我试图了解 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 - 因此不会出现此问题。