关于字节的寻址大小

Addressing Size Regarding Bytes

请确认一下,每个地址都包含一个字节吗?假设您有理论上的地址 FFF0 和 FFFF:这两个地址之间有 16 个值,这意味着它们之间包含 16 个字节,或 8 x 16 位?每个单独的地址都链接到一个字节?

Just to make sure, does every single address contain one byte?

...which means between them they contain 16 bytes, or 8 x 16 bits?

Every individual address is linked to a single byte?

对所有三个问题都是肯定的。

这就是为什么 32 位寻址的限制,您只能访问 2^32 字节 == 4,294,967,296 字节 == 4 GiB。每个可寻址内存位置都可以访问 1 个字节。

如果我们可以用一个地址访问 2 个字节,那么该限制将是 8 GiB。现代芯片和所有软件的架构都必须修改,以确定它们是需要两个字节还是只需要第一个或第二个字节。所以你需要,比如说,1 位来确定它。你猜怎么着,如果你有 33 位机器,这就是我们得到的......最大可寻址 space 为 8 GiB。这仍然是有效的包含 1 个字节的地址。 Workarounds do exist但这与您的问题无关。

* GiB = 二进制千兆字节。

请注意,这与 char 是 1 个字节而 int 是 4 个字节的“类型”无关。编程语言在尝试访问存储在某个位置的 variable/data 的值时对此进行了补偿。它们实际上是按总位数而不是总字节数计算的。所以 int 被认为是 32 位而不是 4 字节。当 C 从内存中获取 int 的值时,它将获取所有 4 个字节,即使 int 的地址仅引用一个,即第一个字节的地址。

是的。地址映射到字节 1 到 1,即使他们希望您一次使用两个或四个字节的字长。