结构体对齐的原理与规则
我们都知道结构体在存储时会进行内存对齐,简单来讲就是对存储空间和读取速度的优化: 对齐粒度越小,浪费的内存空洞就越少,约节省内存空间。 对齐粒度越接近 CPU 的位数,读取效率越高,32 位 CPU 一次能读取 32 个二进制位内存,也就是 4 字节,那么四字节对齐时 CPU 读取效率就最高。
在编写程序时,如果需要处理结构体对齐,应按照以下规则:
- 成员变量的地址要对齐到对齐数的整数倍的地址处
- 对齐数 = 对齐系数 与 该成员大小的较小值
- linux 中默认为 4 字节对齐,vs 中默认为 8
- 结构体总大小为最大对齐数的整数倍(每个成员变量除了第一个成员都有一个对齐数)
- 结构体的对齐数是自己内部成员的对齐数中的最大对齐数