境界合わせに付いて知る
#include <stdio.h> struct A { char a1; int a2; char a3; }; struct B { char a1; char a3; int a2; }; int main() { printf("A=%d B=%d\n", sizeof(struct A), sizeof(struct B)); return (0); }
A=12 B=8 # 本来ならば構造体Aと構造体Bのサイズは同じはずであるしかし32bit環境では4byteずつalignmentされるため # 構造体Aの方は要素ごとにalignmentされ構造体Bの方はa1とa3がまとめてalignmentされるためこのような結果になる