【发布时间】:2019-11-09 11:09:06
【问题描述】:
在 x86-64 和 arm64 等常见的 64 位架构上,通常只有 48 位用于内存寻址,而其他位是第 47 位的副本(对于用户空间程序,通常为零)。因此,剩余的 16 位可用于存储附加数据,如类型标签等,只要这些位在取消引用之前被屏蔽即可。或者,48 位可以适合 64 位浮点数的 NaN 表示。动态/解释语言经常使用这两种技术。
我读过有关英特尔 5 级分页的信息,它将地址范围从 48 位扩展到 57 位,从而显着减少了剩余位,并使 NaN-boxing 成为不可能。 Linux 内核已经添加了对这种分页方案的支持。
鉴于 48 位对应于 262,144 GiB 的内存,我们可以假设我们不会很快在个人电脑、笔记本电脑和手机等消费设备上需要 57 位范围,因此人们可能会假设在这些设备上我们将保留48 位模式在很长一段时间内,上述技术仍然可行,而 57 位模式将仅用于服务器/超级计算机。
我做出这些假设是否正确?或者是否有迹象表明,在不久的将来,即使是消费级设备也会使用 57 位模式?
【问题讨论】:
标签: pointers language-agnostic 64-bit x86-64 arm64