我正在以下地址阅读一些 C 文本:
https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html
在“可寻址内存”部分中,他们说“可寻址主内存的最大大小取决于地址寄存器的大小。 ”
我不明白为什么会这样。
谁能给我一个清楚的解释,好吗?
非常感谢。
我正在以下地址阅读一些 C 文本:
https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html
在“可寻址内存”部分中,他们说“可寻址主内存的最大大小取决于地址寄存器的大小。 ”
我不明白为什么会这样。
谁能给我一个清楚的解释,好吗?
非常感谢。
如果您有 32 位寄存器,那么您可以在单个寄存器中存储的最高地址是 2^32-1,因此您可以寻址 2^32 个单位(在现代计算机中,单位几乎总是字节)。更大的数字根本不适合。
您可以通过使用大于单个寄存器可以容纳的内存地址来解决此问题(并且某些 CPU/操作系统具有这样做的功能),但使用地址/指针会更慢,因为它必须摆弄多个寄存器。
例如,假设您有 32 位寄存器但有 64 位指针,并且想要递增指针以查找char
( ++p
) 数组中的下一项。处理器不必执行简单的递增指令,而是必须
稍微简化一下,这意味着它必须执行分支(if-then-else)指令,这是现代 CPU 执行的最慢和最复杂的指令之一。
(例如,参见维基百科上的x86 内存分段,了解英特尔处理器中使用的多寄存器寻址方案。)
如果您有 1 个地址寄存器,保存 16 位地址,则最多可以有 2^16 - 1 个地址。
不管有多少寄存器,它们可以指向的地址数量将受到它们的宽度(位数)的限制。
因此,可寻址主存储器的最大大小取决于地址寄存器的大小。
保持简单:地址寄存器用于存储和引用内存地址;由于它们的大小和数量是固定的,因此有一个最大地址。
显然,您不能利用比可寻址更多的内存(因为机器不知道如何引用它),因此可用内存实际上受到地址寄存器可以表示的最大地址的限制。