双字节内存访问粒度

时间:2013-05-18 02:53:43

标签: memory memory-access granularity

我试图了解内存对齐,但没有取得多大成功。我正在使用IBM的this文章。

有人可以向我解释这个摘录对双字节内存访问粒度部分的意义:

  

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

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

我对CPU的知识非常有限,因为我只使用上层编程(Objective-C和C ++)。非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

该示例描述了当您尝试在具有双字节访问粒度的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层:0楼1-3楼,4楼4楼。