结构体内存分布三大原则:
原则1:数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储,double为8字节,那么存放的位置从8的位数开始)。
原则2:结构体作为成员:如果一个结构里有其他结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
原则3:收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
联合体:
联合体的长度至少是其内元素的最大值,成员是共享一段内存空间的。总结归纳有两条原则:
1、首先联合体的长度至少为最大成员的长度值。
2、最后确定的长度必须能够整除所有的成员类型(注意char[19],其类型长度为1而不是19),即求它们的最小公倍数。
如有不足,欢迎批评指正。