前言-记录自己的学习历程,有错还请指正
结构体内存对齐规则1.第一个成员在结构体变量偏移量为0的地址处
2.其他成员要对齐到对齐数的整数倍地址处
3.结构体总大小等于最大对齐数的整数倍
4.如果嵌套了结构体,则嵌套结构体对应到自己的最大对齐数的整数倍处
注:对齐数 = 编译器默认的对齐数和该成员大小中的较小值
我们以VS编译器为例来看看下面结构体的大小如何计算(VS编译器默认对齐数为8)
假设结构体首地址从0开始
第一个成员c1在结构体首地址处,也即是地址0处,占用一个字节。
第二个成员c2对齐到该变量的对齐数整数倍的地址处,其大小1与默认对齐数8作比较得出对齐数为1。地址1为c2对齐数的整数倍地址,则其对齐到地址1处,占用一个字节。
第三个成员a对齐到该变量的对齐数整数倍的地址处,同理可得对齐数为4。地址4为a对齐数的整数倍地址,则其对齐到地址4处,占用四个字节。
最后,结构体总大小等于最大对齐数的整数倍,目前来看结构体所占空间大小为8个字节正好为最大对齐数4的倍数,则此结构体大小为8个字节。
我们再来看另外一个例子
同理可得:
第一个成员变量:
第二个成员变量:
第三个成员变量:
目前来看结构体已占用9个字节,最大对齐数为4。由于结构体大小为最大对齐数的整数倍,所以此结构体大小为12。



