简单地说,现在的CPU在设计时总线都是32,64,128位这样的,读数据的时候,只能读取偏移值为4,8,16的倍数地址开始的数据。对于32位机来说,如果一个long类型的变量跨越了4字节边界存储,那么cpu要读取两次,这样效率就低了。同样,在32位机中使用1字节或者2字节对齐,反而会使变量访问速度降低。
打个比方,
如果你有一副红色的扑克牌和一副蓝色的扑克牌,和两个抽屉
红色的扑克牌少了1张
如果不对齐的话就好比
你第一个抽屉放了红色的牌,因为红色少了一张,所以这个抽屉还可以放一张,于是你就那一张蓝色的放进来
其余的蓝色因为放不下了就放到了第二个抽屉内
如果对齐的话
不管第一个抽屉有没有放满,红色的放一个 蓝色的放另一个
如果要你去拿蓝色的牌,你说那种方式简单呢?
http://www.cppblog.com/cc/archive/2007/09/17/10765.html
详细解答