Мои эксперименты показывают, что структура выравнивается по 2-байтовой границе, так как в конце есть дополнительный байт заполнения.
Заполнение C зависит от реализации, и многие компиляторы даже позволяют вамизменить настройки выравнивания.Конкретное выравнивание не определено стандартом C.
Однако в x86_64 есть некоторые оптимизации для структур, которые влияют на это решение о заполнении, для небольших (<= 16 байт) структур они передаются через регистры,и наименьший регистр составляет 2 байта. </p>
Насколько я могу судить, большинство компиляторов C в большинстве случаев выравнивают по границам 4 байта, например, эта структура:
struct small {
int x, y;
char val;
}
10 байт.В то время как этот:
struct big {
int x, y, z, w;
char val;
}
равен 20 байтам.
И в clang, и в gcc структуры выровнены по 2-байтовым границам, когда они <= 16 байт, и выровнены по 4-байтовым границам, в противном случае. </p>