2

我正在尝试学习内存对齐,诚然没有太大的成功。我正在使用这个文章。

有人可以向我解释一下这段摘录在双字节内存访问粒度部分的含义:

但是,请注意从地址 1 读取时会发生什么。因为地址不是均匀地落在处理器的内存访问边界上,所以处理器有额外的工作要做。这样的地址称为未对齐地址。由于地址 1 未对齐,因此具有两字节粒度的处理器必须执行额外的内存访问,从而减慢操作速度。

为什么要按顺序进行另一个内存访问?内存访问边界是什么意思,甚至在内存访问边界上?

我对 CPU 的了解非常有限,因为我只熟悉高级编程(Objective-C 和 C++)。任何帮助是极大的赞赏!

谢谢!

4

1 回答 1

6

该示例描述了当您尝试在具有双字节访问粒度的 CPU 上读取 4 个连续字节的块时会发生什么。在这种类型的 CPU 上,内存以字节对的形式访问,总是从偶数字节开始。

如果您尝试读取从字节 0 开始的块,它必须执行 2 次读取:字节 0-1 和字节 2-3。

如果您尝试读取从字节 1 开始的块,它必须执行 3 次读取:字节 0-1(获取字节 1)、字节 2-3 和字节 4-5(获取字节 4)。

内存访问粒度是它一次访问的字节数,而内存访问边界是这些字节组中的每一个开始的地方。字节组总是以偶数倍的粒度寻址——如果是双字节粒度,它们从偶数地址开始,如果是四字节粒度,它们是 4 的倍数。

作为一个类比,考虑一栋每层有 4 个单元的公寓楼。0-3 单元在 0 楼,4-7 单元在 1 楼,依此类推。如果你想在 0-3 单元的门下放一张传单,你只需要去一层。但是如果你想把传单滑到1-4下面,你必须去2层:1-3的0层,4单元的2层。

于 2013-05-18T03:10:42.970 回答