struct_layout.md
参考这篇文章 C语言结构体内存布局问题
C中结构体的内存布局一般满足下面的规则:
- 首地址对齐:结构体的首地址能够被结构体中最大的基本类型成员大小整除。
- 成员偏移量对齐:结构体中每个成员的地址相对于结构体首地址的偏移量都是该成员大小的整数倍。
- 结构体大小对齐:结构体的大小能够被结构体中最大的基本类型成员大小整除。
对于bit-field,还需要满足下面的规则:
- 若相邻的bit-field成员的类型相同
- 若位宽之和小于类型的sizeof大小,则后面的成员紧邻前一个成员存储,直到不能容纳为止。
- 若位宽之和大于类型的sizeof大小,则后面的成员从新的存储单元开始,其偏移量为其类型大小的整数倍。
- 若相邻的bit-field成员的类型不同,则各编译器的具体实现有差异,一般是从新的存储单元开始,其偏移量为其类型大小的整数倍。
- 若bit-field成员之间穿插着非bit-field成员,则不进行压缩。