1

我正在以下地址阅读一些 C 文本:

https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html

在“可寻址内存”部分中,他们说“可寻址主内存的最大大小取决于地址寄存器的大小。

我不明白为什么会这样。

谁能给我一个清楚的解释,好吗?

非常感谢。

4

3 回答 3

3

如果您有 32 位寄存器,那么您可以在单个寄存器中存储的最高地址是 2^32-1,因此您可以寻址 2^32 个单位(在现代计算机中,单位几乎总是字节)。更大的数字根本不适合。

您可以通过使用大于单个寄存器可以容纳的内存地址来解决此问题(并且某些 CPU/操作系统具有这样做的功能),但使用地址/指针会更慢,因为它必须摆弄多个寄存器。

例如,假设您有 32 位寄存器但有 64 位指针,并且想要递增指针以查找char( ++p) 数组中的下一项。处理器不必执行简单的递增指令,而是必须

  1. 增加低 32 位;
  2. 检查结果是否为零(溢出);
  3. 如果发生溢出,也增加上半部分。

稍微简化一下,这意味着它必须执行分支(if-then-else)指令,这是现代 CPU 执行的最慢和最复杂的指令之一。

(例如,参见维基百科上的x86 内存分段,了解英特尔处理器中使用的多寄存器寻址方案。)

于 2011-02-27T14:31:37.533 回答
2

如果您有 1 个地址寄存器,保存 16 位地址,则最多可以有 2^16 - 1 个地址。

不管有多少寄存器,它们可以指向的地址数量将受到它们的宽度(位数)的限制。

因此,可寻址主存储器的最大大小取决于地址寄存器的大小。

于 2011-02-27T14:31:03.857 回答
2

保持简单:地址寄存器用于存储和引用内存地址;由于它们的大小和数量是固定的,因此有一个最大地址

显然,您不能利用比可寻址更多的内存(因为机器不知道如何引用它),因此可用内存实际上受到地址寄存器可以表示的最大地址的限制。

于 2011-02-27T14:33:40.167 回答