【问题标题】:Size of a Word and addressing字的大小和寻址
【发布时间】:2013-03-22 01:30:00
【问题描述】:

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

根据维基百科:

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

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

【问题讨论】:

  • 再次阅读您引用的内容。它说4GiB of **byte-addressable** memory,意思就是:字节。不是单词,也不是 DWORDS,而是 byte。
  • 如果我没记错的话,字长是由CPU决定的,而处理器的字长是由其外部数据总线的宽度决定的(虽然它可以更窄。)
  • @KenWhite 因此我很困惑。这就是我发帖的原因。为什么它是字节而不是单词。我想这就是你对我投反对票的原因?
  • @Justin:我没有对你投反对票。如果我有,我会在我的最后评论中这么说。但是,您感到困惑的原因尚不清楚。您的问题是“这是否意味着...$,294,967,295 个单词?”,这是我评论的。您对我的评论中的问题是“为什么它是字节而不是单词?”这是完全不同的东西。您提出的问题的答案是“不,它不表示单词。它表示字节,就像您的报价所说的那样。”。

标签: memory architecture operating-system word ram


【解决方案1】:

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

这取决于 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 位地址,则总数会有所不同。

【讨论】:

  • 您好,很抱歉调用此线程。请问您阅读单个字符需要多少左逻辑swift,因为 1 shift 移动 2 个位置,2 shift 移动 4 和 3 shift 移动 8?你能做0逻辑移位吗?谢谢
  • @Korpel 我不确定你在说什么。
  • 优秀的答案!谢谢你。我发现第二个 ascii 绘图相当混乱,但文字流畅清晰:)
  • 只是给其他冲浪者的一个指针,这个话题有一个很好的视频解释here。
【解决方案2】:

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

如果不使用 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)。

【讨论】:

  • 这是否意味着每个地址都有 1 个字节?我不明白为什么一个地址可能是一个块,比如 6 个字节。那么你可以拥有 4,294,967,296 * 6 的可映射 RAM。
  • @Justin 还要详细说明一下,能够完成您评论中的问题的 CPU 特别需要 48 位地址总线。我相信这是当前 64 位处理器使用的。
  • @Justin 很抱歉从 2013 年开始提出这个问题。无论如何要回答你的问题虽然每个地址都有 8 位空间 = 1 字节以便保存数据,但取决于您要保存的内容。如果要保存一个字符,则需要 1 个字节,但如果要存储 Int,则需要 32 位 = 4 个字节,因此 4 个地址是“空格”。 32 位处理器每次读取 4 个字节,因此是 32 位
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2015-03-18
  • 2019-11-05
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多