Размещение структурных переменных в памяти

Элементы структур в общем случае размещаются в памяти последо­ва­тельно с учетом выравнивания начальных адресов полей.

Выравнивание (align) означает, что компилятор выбирает адреса переменных (в т.ч. полей структуры) так, чтобы они были кратны некоторой величине. Эта величина определяется типом переменной и особенностями адресации данных этого типа на аппаратном уровне (чаще всего она равна 2). Часто выравнивание не обязательно, но при этом скорость обращения к объекту может снижаться. Если выравнивание производится, компилятор может быть вынужден добавить между полями структуры пустые байты, и тогда размер структуры (определяемый с помощью sizeof) будет превышать сумму размеров ее полей.