在大多数windows电脑上,为了
简化处理器和存储器之间接口的硬件设计和
提高处理器访问数据的效率。采用地址对齐方法存储数据,也就是地址可以整除数据大小。在不休改的情况下为4可以通过#pragma pack(1)修改对齐系数。
在IA32架构中,数据总线是32位,即一次可以存取4个字节的数据。
在对齐的情况下,struct ALN2的每个成员都可以在一个指令周期内完成;
而假设我们的struct ALN2没有对齐,那么对于struct ALN2中char mA,CPU可以一次取出4个字节获得低位的一个字节,同时需要将高位的3个字节保存在寄存器中,之后的int mB,CPU必须再取得低位的1个字节并通之前保存在寄存器中的数据结果组合在一起,每一个都需要好几条指令,是不是相当麻烦?
在IA32架构中,数据总线是32位,即一次可以存取4个字节的数据。
在对齐的情况下,struct ALN2的每个成员都可以在一个指令周期内完成;
而假设我们的struct ALN2没有对齐,那么对于struct ALN2中char mA,CPU可以一次取出4个字节获得低位的一个字节,同时需要将高位的3个字节保存在寄存器中,之后的int mB,CPU必须再取得低位的1个字节并通之前保存在寄存器中的数据结果组合在一起,每一个都需要好几条指令,是不是相当麻烦?
![](https://img-my.csdn.net/uploads/201212/11/1355157509_6978.jpg)