http://www.alex-ionescu.com/?p=50。
我读了上面的帖子。作者通过单链表示例解释了为什么 Windows x64 只支持 44 位虚拟内存地址。
struct { // 8-byte header ULONGLONG Depth:16; ULONGLONG Sequence:9; ULONGLONG NextEntry:39; } Header8;
首先要做的牺牲是将序列号的空间减少到 9 位而不是 16 位,从而减少列表可以实现的最大序列号。这仍然只为指针留下了 39 位——对 32 位的改进是平庸的。通过在分配时强制结构为 16 字节对齐,可以再赢得 4 位,因为现在可以始终假定底部位为 0。
哦,我无法理解。
什么“通过在分配时强制结构为 16 字节对齐,可以再赢得 4 位,因为现在可以始终假定底部位为 0。” 方法?