NaN装箱和带标记的指针在64位平台上是否有前途?

问题描述 投票:1回答:1

在像x86-64和arm64这样的常见64位体系结构上,通常仅48位用于内存寻址,而其他位是位47(对于用户空间程序通常为零)的副本。因此,剩余的16位可以用于存储其他数据,例如类型标签等,只要在取消引用之前将这些位屏蔽掉即可。另外,这48位可以适合64位浮点数的NaN表示形式。动态/解释语言经常使用这两种技术。

我已经读过英特尔5级分页技术,它将地址范围从48位扩展到57位,从而显着减少了剩余的位,也使NaN装箱成为不可能。 Linux内核已经添加了对此分页方案的支持。

鉴于48位对应于262,144 GiB的内存,我们可以假设我们很快将不需要PC,笔记本电脑和电话等消费类设备上的57位范围,因此可以假设在这些设备上,我们将继续使用在很长一段时间内,48位模式仍然可行,而上述技术仍然可行,而57位模式将仅用于服务器/超级计算机。

我正确做出这些假设吗?还是有迹象表明,即使是消费者规模的设备也将在不久的将来使用57位模式?

pointers language-agnostic 64-bit x86-64 arm64
1个回答
0
投票

即使内存映射的持久性存储变得广泛(NV-DIMM),消费类PC仍需要超过64TiB或128TiB的存储+ DRAM。请记住,上半部分的内核需要一半的虚拟地址空间供内核使用,并且通常希望将所有物理内存直接映射到一定范围的虚拟地址。我认为,[以及在内核空间中进行其他映射一样。例如有关Linux的功能,请参见https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt您怀疑,操作系统实际上不会在物理地址空间小于256TiB的计算机上启用PML5。不需要那么多虚拟地址空间,并且它具有性能成本(来自另一级别的页表的更昂贵的页面遍历)。分页浏览硬件可能无法始终保留两个实际使用的顶级条目的缓存; CR3更改上所有内容的无效都可以强制刷新。 (页面漫游硬件通常可以缓存基数树的上层,以加快附近页面的TLB丢失。)

© www.soinside.com 2019 - 2024. All rights reserved.