Простой ответ заключается в том, что структура содержит отступы, что делает ее размер (как сообщается sizeof
) больше, чем сумма его частей.Заполнение между элементами структуры обычно существует для выравнивания каждого элемента структуры (например, по 32- или 64-битной границе).В конце может также быть заполнение, например, чтобы выровнять несколько последовательных структур (например, в массиве).
Соответствующие части из стандарта C11:
6.7.2.1 (Семантикаструктуры и союзы)
… Внутри объекта структуры может быть безымянный отступ, но не в его начале.
6.5.3.4 (sizeof
)
… При применении к операнду, который имеет структуру или тип объединения, результатом является общее количество байтов в таком объекте, включая внутреннее и конечное заполнение.