考虑到CPU的字大小允许它处理存储器中的每个字节 鉴于通过PAE,CPU甚至可以使用比字大小更多的位来进行寻址。
CPU无法一步读取未对齐字的原因是什么?
例如,在32位机器中,您可以读取从位置0开始的4字节块,但是您无法读取从位置1开始的块(您可以但需要几个步骤)。
为什么CPU不能这样做?
答案 0 :(得分:3)
问题不在于CPU能否解决内存中的任何单字节问题。但它的内存具有不同的粒度。 像Oli所说,这是非常特定于架构的,但内存芯片通常通过数据总线宽度来解决。意味着给定的地址代表一个完整的"字"他们的数据总线。
我们以32位CPU为例,32位宽的数据总线连接到存储设备。当CPU想要访问地址0x00000000
处的单词时,它确实想要访问字节0
,1
,2
和3
。然而,对于存储器芯片,这由单个地址0x00000000
表示。
现在当CPU想要访问地址0x00000001
上的单词时,它真的想要访问字节1
,2
,3
和{{1 }}。然而,对于存储器芯片,这由地址4
处的一段字和地址0x00000000
处的一段字表示。
因此需要两个总线周期。
编辑:添加一些布线图
为了说明这一点,这里有两种寻址方案:
注意RAM芯片地址的位移。
地址将如下所示:
0x00000001
要访问dword // From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007
,您可以看到无法直接寻址。您需要向RAM芯片询问地址@0x00000001
和0x00000000
的两个dwords。
答案 1 :(得分:1)
简单的答案是他们无法解决,因为他们的设计并非如此。
以这种方式设计它们的主要原因是性能和可扩展性。我们会失去太多非常重要的功能来支持这一点。
一个简单的比喻,简陋的Shipping Container。在装运集装箱的日子之前,许多不同形状和尺寸的货物尽可能有效地装入船体。由于货物的大小无限可变,从板条箱到咖啡袋,再到干草和棉花捆,这些船只的容量都非常低,利用效率低下。
集装箱改变了所有这一切,现在如果你想在国际上发货,它必须在标准尺寸的集装箱中。你不能只是把你的猫粮袋装到香港的一个集装箱船上给你的朋友,它的效率是非常低效的,它只是不是&#&## 39;完成。
你想快速将这种猫粮送给你的朋友,而不是购买整个集装箱吗?好吧,你可以支付像FedEx这样的快递公司来支付747的费用,但你肯定会支付这笔费用。