首先介绍对齐规则:
1.结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处;
2。其他成员变量要对其到某个数字(对齐数)的整数倍的地址处;
对齐数=编译器默认的一个对齐数(vs中默认为8)与该成员变量大小的较小数;
VS中默认的值是8;
linux中gcc没有默认对齐数,对齐数就是该成员大小。
3.结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数)的整数倍!!!
接下来用代码来给大家演示一下:
int main()
{
typedef struct {
int a;
char b;
short c;
short d;
}AA_t;
printf("%d", sizeof(AA_t));
return 0;
}
通过画图大家可以看的更清楚一点,从图中大家可以看到a,b,c,d,四个变量用到了9个字节;但是结构体的总大小为最大对齐数的整数倍,所以最大对齐数是4,下一个4的整数倍为12,所以结构体的总大小为12.