10

我正在刷新自己的记忆信息,但我对单词的大小感到困惑。据我了解,Word 不是一个通用定义的大小,而是由特定系统定义的大小(以字节数计)。

根据维基百科:

因此,具有 32 位内存地址的处理器可以直接访问 4 GiB 的字节可寻址内存。

这是否意味着 32 位处理器可以处理 4,294,967,295 个?32 位 Windows 的 RAM 限制为 4GB,但阅读单词的含义让我感到疑惑。Windows 中的每个字是否等于 1 个字节?一个字的大小是否只是更大的字节数,而 32 位处理器能够处理 8GB、10GB、12GB 甚至更多的内存?

4

2 回答 2

10

这是否意味着 32 位处理器可以处理 4,294,967,295 个字?

这取决于 CPU 以及您如何看待它。

有些 CPU 无法处理小于一个字的任何内容。16 位德州仪器数字信号处理器就是一个很好的例子。它们的 C/C++ char(AKA byte)shortint类型都是相同的大小,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 位地址,则总数会有所不同。

于 2013-04-01T01:47:34.823 回答
3

您混淆了字长和字节大小,因为字长由处理器决定,而字节大小是通用的。

如果不使用 PAE(物理地址扩展),32 位处理器只能处理 4GB 的 RAM,因为只有 2 ^ 32 = 4,294,967,296 个不同的数字可以使用 32 位来表示。这是硬件限制

通过将进程映射到页表,利用 PAE 的 32 位系统可以寻址超过 4GB。这将授予每个进程访问 4GB 内存的权限。通过支持 PAE,32 位版本的 Windows Server 2003 Datacenter 在基于 x86 的计算机上支持高达 64 GB 的 RAM。

Edit

字长表示 CPU 一次可以处理的位数。所以 32 位 = 4 个字节。然而,字长和地址长经常互换使用,这会导致混淆,因为它们确实不同。Pentium Pro 是具有 36 位宽地址总线的 32 位 CPU,允许 64GB 的可访问内存(通过 PAE)。

于 2013-03-31T23:43:06.807 回答