http://www.alex-ionescu.com/?p=50.
我读了上面的帖子。作者以单链表为例解释了为什么Windows x64仅支持44位虚拟内存地址。
struct { // 8-byte header
ULONGLONG Depth:16;
ULONGLONG Sequence:9;
ULONGLONG NextEntry:39;
} Header8;
第一个牺牲是减少序列的空间
将数字从 16 位改为 9 位,减少最大序列
列表中可以实现的数字。这仍然只留下 39 位
指针 — 与 32 位相比的平庸改进。通过强制
结构体在分配时是 16 字节对齐的,还可以多 4 位
赢了,因为现在可以始终假定底部位为 0。
哦,我听不懂。
“通过在分配时强制结构进行 16 字节对齐,可以多赢得 4 位,因为现在可以始终假定底部位为 0。”方法?
16 is 0010000 in binary
32 is 0100000 in binary
64 is 1000000 in binary
etc
您可以看到,对于所有 16 的倍数的数字,最后四位始终为零。
因此,您可以将它们保留下来,并在需要使用指针时将它们添加回来,而不是存储这些位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)