为什么内存对齐计算机平台往往为了提高内存萃取效率,往往对数据进行对齐存放,如果不对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那 么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。
内存对齐规则
① 各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数
② 保证整个结构所占字节数是为结构的字节边界数(结构中占用最大空间的类型所占用的字节数)的整数倍:
struct mystruct{
char a; //偏移量为 0,满足条件①,char占一个字节,
double b; //偏移量为1,不满足条件①,填充7个0,然后偏移量满足条件,b放在偏移量为8的位置,所占字节为8
int c;//偏移量为16,满足条件①,放在偏移量为16的位置上,所占字节为4
//所有成员变量一共占20字节,但是不满足②,所以填充四个0,最终所占字节数为24
};