内存对齐 · 编译器为什么填充字节
成员偏移须是自身大小的整数倍,结构体总大小须是最大成员的整数倍 → sizeof ≥ 各成员之和
struct sample1 { char c1; int d; char c2; };
sizeof = 12
成员仅 6 字节,对齐多出 6 字节填充
只调整成员声明顺序(把两个 char 集中放)↓
struct sample2 { char c1; char c2; int d; };
sizeof = 8
同样的成员,省下 4 字节
把同类/小类型成员集中排列,可减少填充、节省内存
▶ 重播