gpt4 book ai didi

c - 处理器如何读取内存?

转载 作者:行者123 更新时间:2023-11-30 19:59:24 25 4
gpt4 key购买 nike

我正在尝试了解计算机如何排列和处理内存,但我不明白对齐的概念。

例如,在 32 位架构中,如果短字节(2 字节)完全适合单个 32 位字,即使它们不位于偶数地址,为什么我们说它们未对齐? p>

因为如果处理器读取 32 位乘 32 位,并且一个字符位于地址 x0,则后面跟着一个短字符(地址 x01 和 x02),然后后面跟着另一个字符 (x03)。突然就没有问题了,因为处理器读取了 4 个字节,所以不会有剪切数据。

所以short对齐了,不是吗?

最佳答案

问题表明处理器有 32 条线连接到总线,用于数据,可能还有其他线用于控制。当它需要从内存中获取数据时,它会在总线上放置一个地址,请求从内存中读取数据,等待数据,然后通过这 32 根线读取数据。

在典型的处理器设计中,这 32 条线连接到某个临时内部寄存器,该寄存器本身也连接到其他寄存器。将这 32 位作为一个 block 移动很容易,每个位都在自己的线路上。

如果我们想移动 32 位中的某些位,我们需要对它们进行移位。这可以通过各种硬件来完成,例如我们将位放入的移位单元,请求一定量的移位,并从中读取结果。在内部,该移动单元将有各种连接和开关来完成其工作。

通常,这样的移位单元能够将八个位从四个位置中的任何一个(从位 0、8、16 或 24 开始)移动到基位置 (0)。这样,诸如“加载字节”之类的指令可以通过从内存中读取 32 位(因为它仅以 32 位 block 的形式出现)来实现,然后使用移位单元获取所需的字节。该移位单元可能没有将任意一组位(例如,从 7、13 或 22 开始)移动到基本位置所需的电线和开关。这将需要更多的电线和开关。

处理器还需要能够执行加载 16 位指令。为此,移位单元将能够将 16 位从位置 0 或 16 移动到位置 0。当然,工程师可以将其设计为也将 16 位从位置 8 移动到位置 0。但这需要更多的电线和开关,这会增加成本金钱、硅和能源。在许多处理器中,决定这种花费不值得,因此没有实现该功能。

因此,在加载过程中,硬件根本无法将数据从字节 1 和 2 转移到字节 0 和 1。 (处理器中可能还有其他移位器,例如用于实现移位指令的通用逻辑单元中,但这些移位器通常是独立的,并通过指令调度和控制机制进行访问。它们不属于用于从内存。)

关于c - 处理器如何读取内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60132553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com