在我的笔记中,我发现了以下来自未知来源的引述:
A字节寻址32 位计算机可以寻址 2^32 = 4,294,967,296 字节内存,或 4 吉比字节 (GiB)。
具有 32 位地址总线的系统可以寻址 2^32(4,294,967,296)个内存位置。如果每个内存地址保存一个字节,可寻址内存空间为4 GB。
在计算机中,什么决定了内存地址可以容纳多少内存,即计算机是字节寻址、字寻址还是 xxxx 寻址?是 RAM 本身、CPU 还是其他东西?
注意:我的问题与编程无关。我认为这与编程角度不同,对象地址所占的内存量取决于其数据类型(int、float 等)。
谢谢!
答案1
不谈技术细节(我无论如何都会搞错),计算机硬件本身的设计和构建方式是每个地址引用一个字节、2 个字节、4 个字节或其他字节。操作系统对此别无选择;必须按照硬件设计编写操作系统。
当今运行的大多数(可能所有)计算机都是字节寻址的,一个字节为 8 位。过去的设计有所不同。
地址中的位数决定了地址的数量。存储在地址中的位数由设计指定;将有一个引脚和一条线来承载数据。将这些数字相乘可得到可以存储的最大位数。
回答您的实际问题:是 RAM 本身(是的)、CPU(是的)还是其他东西(是的)、主板和芯片组。所有这些都必须设计为协同工作,并且它们都必须在字节大小和寻址上达成一致。
答案2
在过去,处理器有引脚,其中一些用于与内存通信。
您有 A 引脚用于指定地址,还有 D 引脚用于读取或写入数据。80 年代早期的典型 8 位处理器将具有引脚 D0 至 D7 和 A0 至 A15。这意味着它可以寻址最多 2^16 个 8 位(D0 至 D7)字节的内存,即 64K。16 位 CPU 将有 16 条 D 线(m68k是一个例子),以及 32 位 CPU(如奔腾) 则有三十二个。
有可能是 16 位架构带有 8 位外部总线,或者 32 位架构带有 16 位外部总线 - 有多种因素决定 CPU 的“位”性,数据宽度只是其中之一。内部架构可能仍然不同。
看看引脚排列(尽管 CPU 不再有“引脚”,但主板有引脚,而 CPU 现在有“地”),比如 Core i7 等较新的产品 - 情况已经发生了变化。我不确定 DDR0_DQ[63] 之类的东西是什么意思 - 由于缓存、NUMA 和多核 CPU,如今 CPU 和内存之间的关系很复杂。
因此,这是由 CPU 架构和它使用的物理内存接口的组合决定的。
答案3
在计算机中如何确定内存地址可以容纳多少内存?
很好的入门级问题。
我想说简单的答案是成本和复杂性之间的权衡。
例如,曾经有过一位计算机,它每次只能处理一位,方法是先移入一些位,然后将它们组合在一起(当然那是很久以前的事情了)。它们将接线保持在最低限度。而 4 位宽的数据字计算机的历史并不长。我正在使用的计算机每次可以得到一个 64 位宽的字。但请注意,32 位机器只需获取两个 32 位宽的字并将它们组合在一起即可完成相同的操作。此外,我还记得旧的 IBM 大型机有大约 10 种不同的字寻址方式。但大多数都是在固件中完成的,以方便程序使用,因为它实际上只寻址一种大小的物理内存字(以使硬件保持简单)。
所以答案是,做事的方法有很多,设计方法也有很多,而且几乎每种方法都有。成本和速度是决策的依据。