我理解为什么需要对齐数据(以及为完成它所做的所有努力,比如填充),这样我们就可以减少内存访问的次数,但这假设处理器只能获取 4 的倍数(假设我们使用的是 32 位建筑学)。由于这个假设,我们需要对齐内存。
我的问题是:
为什么我们只能访问 4 的倍数(效率、硬件限制、另一个)?
这样做的好处是什么?为什么我们不能访问所有可用的地址?
我理解为什么需要对齐数据(以及为完成它所做的所有努力,比如填充),这样我们就可以减少内存访问的次数,但这假设处理器只能获取 4 的倍数(假设我们使用的是 32 位建筑学)。由于这个假设,我们需要对齐内存。
我的问题是:
为什么我们只能访问 4 的倍数(效率、硬件限制、另一个)?
这样做的好处是什么?为什么我们不能访问所有可用的地址?
内存由连接到内存总线的硬件 (RAM) 构成。总线越宽,获取数据所需的周期就越少。如果内存为 1 字节宽,则需要 4 个周期才能读取一个 32 位值。随着时间的推移,内存架构已经发展,并且根据处理器的类别(嵌入式、低功耗、高性能等)和高速缓存设计,内存可能非常宽(例如,256 位)。
给定一个非常宽的内部总线(在 RAM 或缓存之间)和寄存器,比如两倍于寄存器宽度,如果数据路径中有桶形移位器,则无论对齐如何,您都可以在一个周期内获取一个值。桶式移位器很昂贵,因此并非所有处理器都有它们;如果路径中没有一个,则需要多个周期来对齐值。