【发布时间】:2016-06-07 19:39:31
【问题描述】:
虽然我试图了解 32 位 cpu 和 Linux 的高内存问题,但为什么 64 位 cpu 没有 high-memory problem?
特别是虚拟内存在内核空间和用户空间的划分是如何改变的,使得64位cpu不存在高内存的需求?
谢谢。
【问题讨论】:
标签: linux cpu-architecture virtual-memory
虽然我试图了解 32 位 cpu 和 Linux 的高内存问题,但为什么 64 位 cpu 没有 high-memory problem?
特别是虚拟内存在内核空间和用户空间的划分是如何改变的,使得64位cpu不存在高内存的需求?
谢谢。
【问题讨论】:
标签: linux cpu-architecture virtual-memory
32 位系统只能寻址 4GB 内存。在 Linux 中,这分为 3GB 的用户空间和 1GB 的内核空间。这 1GB 有时还不够,因此内核可能需要映射和取消映射内存区域,这会导致相当大的性能损失。内核空间是“高”1GB,因此得名“高内存问题”。
64 位系统可以处理 大量 内存 - 16 EB - 所以这个问题不会在那里发生。
【讨论】:
对于 32 位地址,您只能寻址 2^32 字节的内存 (4GB)。所以如果你有更多,你需要用一些特殊的方式来解决它。使用 64 位地址,您无需特别努力即可寻址 2^64 字节的内存,而这个数字比地球上存在的所有内存都要大。
【讨论】:
该位数是指处理器的字长。除其他外,字长是机器上内存地址的大小。内存地址的大小影响可以唯一引用的字节数。因此,通过一些简单的数学计算,我们发现在 32 位系统上最多存在 2^32 = 4294967296 个内存地址,这意味着您在数学上限制了大约 4GB 的 RAM。
但是在 64 位系统上,您有 2^64 = 1.8446744e+19 可用的内存地址。这意味着您的计算机理论上可以引用近 20 EB 的 RAM,这比计算历史上任何人都需要更多的 RAM。
【讨论】: