字节对齐的计算规则
1、先看结构中最大类型的数据,包括嵌套结构体(如果有)。确定一行的最大数(如果有double,那一行就是8个字节,如果最大是int或者long,那一行就是4个字节,原来一直以为是编译器决定,这不对的)。
2、如果只有一个元素,那就是这个元素的大小,不需要补齐。3、单一变量,先看看元素放到这一排的剩余位置能否完全放下,如果放不下,则从下一行的首地址开始放。
4、嵌套子结构体则要看看这个元素的整个大小( 就是累加的大小,不是对齐的大小 )放到这一排的剩余位置能不能放下,放不下则从下一行开始,子结构体中的元素排列规则和单一变量相同)
char(1),short(2),int(4),float(4),long(4),double(8)
例1
struct {
int a; //第一行,最大元素,所以每行有4个字节
short b; //第二行首位,第二行还有两个2字节的剩余空间
char c1; //第二行
char c2; //第二行
} a1; //大小为8
空间分布(8个字节)
a | a | a | a |