可寻址性限制?

时间:2011-02-27 14:28:41

标签: c memory-address computer-architecture

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

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

可寻址内存一节中,他们说“可寻址主内存的最大大小取决于地址寄存器的大小。

我不明白为什么会这样。

有人能给我一个明确的解释吗?

非常感谢。

3 个答案:

答案 0 :(得分:3)

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

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

例如,假设您有32位寄存器但是有64位指针,并希望递增指针以查找char++p)数组中的下一项。处理器必须

,而不是执行简单的增量指令
  1. 增加低32位;
  2. 检查结果是否为零(溢出);
  3. 如果发生溢出,也会增加上半部分。
  4. 简化一点,这意味着它必须执行一个分支(if-then-else)指令,这是现代CPU执行的最慢和最复杂的指令之一。

    (请参阅维基百科上的x86 memory segmentation,了解英特尔处理器中使用的多寄存器寻址方案。)

答案 1 :(得分:2)

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

然而,许多寄存器,它们可以指向的地址数量将受其宽度(位数)的限制。

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

答案 2 :(得分:2)

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

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