Pointers 标记指针存在的原因

Pointers 标记指针存在的原因,pointers,memory,tagging,Pointers,Memory,Tagging,我了解标记指针背后的理论,以及如何将附加数据保存在指针中。 但我不明白这部分(来自维基百科关于标记指针的文章) 大多数体系结构都是字节可寻址的(最小的可寻址单元是一个字节),但某些类型的数据通常会与数据的大小对齐,通常是一个字或多个字。这种差异使指针的一些最低有效位未使用 为什么会发生这种情况? 指针是否只有30位(在32位体系结构上),而这2位是对齐的结果? 为什么有2个比特没有被使用? 这是否会减少addresable空间的大小(从2^32字节减少到2^30字节)?考虑使用16位对齐和16位

我了解标记指针背后的理论,以及如何将附加数据保存在指针中。
但我不明白这部分(来自维基百科关于标记指针的文章)

大多数体系结构都是字节可寻址的(最小的可寻址单元是一个字节),但某些类型的数据通常会与数据的大小对齐,通常是一个字或多个字。这种差异使指针的一些最低有效位未使用

为什么会发生这种情况?
指针是否只有30位(在32位体系结构上),而这2位是对齐的结果?
为什么有2个比特没有被使用?

这是否会减少addresable空间的大小(从2^32字节减少到2^30字节)?

考虑使用16位对齐和16位指针的体系结构(只是为了避免有太多的二进制数字!)。指针将只引用16的倍数的内存位置,但指针值仍然精确到字节。所以一个二进制指针是:

00000000000001000

指内存位置4(内存中的第五个字节):


谢谢你的回答,我终于明白它是如何工作的了。 ┌────────────────────┬───────────────────┬─────────────┬──────────────┐ │ Address in Decimal │ Address in Binary │ 8─bit bytes │ 16─bit words │ ├────────────────────┼───────────────────┼─────────────┼──────────────┤ │ 0 │ 0000000000000000 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 1 │ 0000000000000001 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ 2 │ 0000000000000010 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 3 │ 0000000000000011 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ 4 - this one │ 0000000000000100 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 5 │ 0000000000000101 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ 6 │ 0000000000000110 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 7 │ 0000000000000111 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ ... │ │ │ │ └────────────────────┴───────────────────┴─────────────┴──────────────┘ ┌────────────────────┬───────────────────┬─────────────┬──────────────┐ │ Address in Decimal │ Address in Binary │ 8─bit bytes │ 32─bit words │ ├────────────────────┼───────────────────┼─────────────┼──────────────┤ │ 0 │ 0000000000000000 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 1 │ 0000000000000001 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 2 │ 0000000000000010 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 3 │ 0000000000000011 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ 4 │ 0000000000000100 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 5 │ 0000000000000101 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 6 │ 0000000000000110 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 7 │ 0000000000000111 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ 8 │ 0000000000001000 │ ┌─────────┐ │ ┌──────────┐ │ │ │ │ └─────────┘ │ │ │ │ │ 9 │ 0000000000001001 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 10 │ 0000000000001010 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ │ │ │ │ 11 │ 0000000000001011 │ ┌─────────┐ │ │ │ │ │ │ │ └─────────┘ │ └──────────┘ │ │ ... │ │ │ │ └────────────────────┴───────────────────┴─────────────┴──────────────┘