内存对齐 · 编译器为什么填充字节

成员偏移须是自身大小的整数倍,结构体总大小须是最大成员的整数倍 → 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 字节 把同类/小类型成员集中排列,可减少填充、节省内存