内存对齐规则是指变量的偏移量要是他自身类型长度的整数倍。并且结构体的总长度要是其中最长变量类型的整数倍。
struct s{
char a;
char b;
int c;
}
sizeof(s)的大小并不是6(1+1+4) ,而应该是8.这是由于结构体的对齐规则,在b之后,系统会补充2个字节的填充字节。以确保c的偏移地址是4的整数倍。
struct s2{
char a;
int b;
char c;
}
sizeof(s2)的大小为12。由于b的偏移要是4的整数倍,所以在a之后要添加3个填充字节。由于结构体S2的大小要是其中最长变量类型int的整数倍,所以结构体的大小不是9,而是在c之后添加三个字节的填充字节,故sizeof(s2)==12.