请原谅我,如果您觉得这个问题已经回答了无数次,但我需要回答以下问题!
发布于 2010-06-11 18:21:04
CPU是面向单词的,而不是面向字节的。在简单的CPU中,内存通常被配置为每个地址选通返回一个字(32位、64位等),其中下两个(或更多)地址行通常不关心位。
Intel CPU可以对许多指令在非字赏金上执行访问,但是由于CPU内部执行两个内存访问和一个数学操作来加载一个字,因此会造成性能损失。如果您正在进行字节读取,则不应用对齐。
一些CPU (ARM或Intel SSE指令)需要对齐内存,在进行非对齐访问(或抛出异常)时具有未定义的操作。它们没有实现更为复杂的负载/存储子系统,从而节省了大量的硅空间。
对齐取决于CPU字大小(16、32、64位)或SSE的SSE寄存器大小(128位)。
对于最后一个问题,如果您一次加载一个数据字节,那么大多数CPU上没有对齐限制(有些DSP没有字节级指令,但很可能不会遇到一个)。
发布于 2010-06-11 18:22:00
很少有数据“必须”对齐。更多的是,某些类型的数据可能执行得更好,或者某些cpu操作需要某种数据对齐。
首先,假设一次读取4个字节的数据。我们还可以说,您的CPU有32位数据总线。我们还假设您的数据存储在系统内存中的字节2。
现在,由于您可以一次加载4个字节的数据,让您的地址寄存器指向一个字节没有多大意义。通过使您的地址寄存器指向每4个字节,您可以操作4倍的数据。换句话说,您的CPU可能只能读取以字节0、4、8、12、16等字节开始的数据。
这就是问题所在。如果您希望数据从字节2开始,并且正在读取4个字节,那么一半的数据将位于地址位置0,另一半位于位置1。
因此,基本上,您将以两次命中内存来读取一个4字节的数据元素。有些CPU不支持这种操作(或者强迫您手动加载和组合这两个结果)。
有关更多详细信息,请访问此处:对齐
发布于 2010-06-11 18:18:21
一般来说,所有这三个问题的答案都是“这取决于你的系统”。更多细节:
https://stackoverflow.com/questions/3025125
复制相似问题