memory - 字的大小和寻址

标签 memory architecture operating-system word ram

我正在刷新自己的内存信息,但我对单词的大小感到困惑。在我的理解中,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)、shortint 类型都是相同的大小,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/

相关文章:

c# - 结合 ORM、工作单元和存储库模式的主从 View

linux - OpenCL - 如果 GPU 内存大于系统 RAM 会发生什么

model-view-controller - 新的 Web 应用程序应该遵循 MVC 还是 MVP 模式?

c# - 在哪里存储应用程序全局设置?

operating-system - 为什么在信号量操作期间必须禁用所有中断?

c - 调用malloc()和free()时寄存器/缓存和主存之间是否有数据传输

c - 尽管内存已被释放,Valgrind 仍检测到内存泄漏

memory - 并发写入同一内​​存地址

java - 获取其他jvm的内存使用详情

c - SYSCALL() 在 Linux 中在哪里实现?