foo*_*512 2 memory memory-access granularity
我正在尝试学习内存对齐,但没有取得太大的成功。我正在使用IBM 的这篇文章。
有人可以从双字节内存访问粒度部分向我解释这段摘录的含义:
但是,请注意从地址 1 读取时会发生什么。因为地址不是均匀地落在处理器的内存访问边界上,所以处理器有额外的工作要做。这种地址称为未对齐地址。由于地址 1 未对齐,因此具有两字节粒度的处理器必须执行额外的内存访问,从而减慢了操作速度。
为什么要按顺序进行另一个内存访问?内存访问边界是什么意思,它甚至在内存访问边界上是什么意思?
我对 CPU 的了解非常有限,因为我只熟悉上层编程(Objective-C 和 C++)。任何帮助是极大的赞赏!
谢谢!
该示例描述了当您尝试使用双字节访问粒度在 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 层。