我正在刷新自己的内存信息,但我对单词的大小感到困惑。在我的理解中,Word 不是一个通用定义的大小,而是由特定系统定义的大小(以字节数计)。
根据维基百科:
Hence, a processor with 32-bit memory addresses can directly access 4 GiB of byte-addressable memory.
这是否意味着 32 位处理器可以处理 4,294,967,295 个字? 32 位 Windows 的 RAM 限制为 4GB,但阅读单词的含义让我感到疑惑。 Windows 中的每个字是否等于 1 个字节?一个字的大小是否只是更大的字节数,而 32 位处理器能够处理 8GB、10GB、12GB 甚至更多的内存?
最佳答案
Does that mean that a 32-bit processor can address 4,294,967,295 Words?
这取决于 CPU 以及您如何看待它。
有些 CPU 无法处理小于一个字的任何内容。 16 位德州仪器数字信号处理器就是一个很好的例子。它们的 C/C++ char
(AKA byte
)、short
和 int
类型都是相同的大小,16位。这是可以用唯一地址(指针)寻址的最小内存单元,同时也是机器字。由于这些处理器上的数据地址/指针是 16 位的,因此它们最多可以寻址数据存储器中的 216 个 16 位字。
现在,如果您回到 32 位操作模式的 x86 CPU,情况会有所不同。内存的最小可寻址单元是 8 位字节,最大的是 32 位字(机器字)。地址和指针也是 32 位的(如果我们忽略分段和页面转换)。这让我们有 232 个唯一的内存地址。而且,使用它们,您最多可以访问 232 8 位字节的内存。但是,您可以使用 232 个唯一地址来寻址多少个 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 上,您可以使用 232 个唯一地址来寻址多少个 32 位字?如果您说的是所有唯一可寻址和重叠的,那就是其中的 232。如果,OTOH,您正在谈论所有唯一可寻址且不重叠的,那就是其中的 230。
OTOH,如果您的 32 位 CPU 使用非 32 位地址,则总数会有所不同。
关于memory - 字的大小和寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735567/