目录
结构体对齐规则
- 第一个成员在与结合体变量偏移量为0 的地址处 (第一个位置)
- 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数 = 编译器默认的一个对齐数 与 该成员大小的 较小值
(vs编译器的默认对齐数是8) (int类型的大小为4) 则对齐数为 4 - 结构体的总大小为结构体成员中的最大对齐数的整数倍
- 如果嵌套了结构体的 情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是其所有最大对其的(含嵌套结构体)的整数倍
图解
1,普通类型的计算
这里算出的大小是16,根据上面的对齐规则我们可以画出内存
通过画图分析:
2,结构体嵌套结构体
为什么存在内存对齐?
拿空间换时间
- 平台原因(移植)
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则硬件异常 - 性能原因
数据结构(尤其是栈)应该尽可能地在自然边界上对齐;原因是为了访问未对齐的内存,处理器需要做两次内存访问,而访问对齐的内存只要访问一次。