这是否意味着 32 位处理器可以处理 4,294,967,295 个字?
这取决于 CPU 以及您如何看待它。
有些 CPU 无法处理小于一个字的任何内容。16 位德州仪器数字信号处理器就是一个很好的例子。它们的 C/C++ char
(AKA byte
)short
和int
类型都是相同的大小,16 位。这是可以用唯一地址(指针)寻址的最小内存单元,同时也是机器字。由于这些处理器上的数据地址/指针是 16 位的,因此它们最多可以寻址数据存储器中的 2 16个 16 位字。
现在,如果您回到 32 位操作模式的 x86 CPU,情况会有所不同。内存的最小可寻址单元是 8 位字节,最大的是 32 位字(机器字)。地址和指针也是 32 位的(如果我们忽略分段和页面转换)。这让我们有 2 32 个唯一的内存地址。而且,很简单,使用它们,您最多可以访问 2个 32 8 位字节的内存。但是你可以用 2 32 个唯一地址寻址多少个 32 位字?答案取决于您是否想要不重叠或重叠的单词。你看,x86 CPU 可以访问任何地址的 32 位内存单元,而不仅仅是 4 字节的倍数地址。
在 x86 上,您不仅限于此:
0 1 2 3 4 5 6 7 <- address
\word/ \word/
这些都是 x86 上 32 位字访问的有效地址:
0 1 2 3 4 5 6 7 <- address
\word/ | | | |
\word/ / | |
\word/ / |
\word/ /
\word/
...
那么,在 x86 上,您可以使用 2 32 个唯一地址来寻址多少个 32 位字?如果您谈论的是所有唯一可寻址和重叠的,那就是其中的 2 32 个。如果,OTOH,您正在谈论所有唯一可寻址且不重叠的,那就是其中的 2 30个。
OTOH,如果您的 32 位 CPU 使用非 32 位地址,则总数会有所不同。