出于效率的考虑,C语言引入了字节对齐机制。其3条通用准则是:
准则1 结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
准则2 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果有需要,编译器会在成员中间填充字节(internal adding).
准则3 结构体的总大小为结构体最宽基本类型成员大小的整数倍。如有需要,编译器会在最末一个成员之后加上末尾填充字节(trailing padding).
遇到结构体嵌套时候,有以下变更解释
准则2 重新解释为:“复合成员相对于结构体首地址的偏移量是复合成员中最宽简单类型成员大小的整数倍。”