平常说的字节对齐主要是指按地址对齐,也就是数据的存取地址具有某种相同的特性,即能被某个数据长度值整除。例如,32位(4字节)长的数据的存取地址能被4整除。
字节对齐主要是硬件平台的要求,因为对齐的话硬件上实现起来比较简单。反过来说,如果不对齐,那么就有可能因为硬件不支持该操作而触发异常,或者硬件支持,但是实现起来相对比较复杂,导致存取效率不高。譬如32位平台,读取int型数据,如果硬件平台每次读都从偶地址开始,那么要是这个int型数据存放在奇地址开始的地方,就需要读取两次,并且还需要对两次读取结果进行拼装,这样一来肯定慢多了。
一般情况下,也不是特别需要注意字节对齐问题,因为编译器把相关的问题自动处理了。比较明显的是C中的结构体。像结构体