Типичное требование, чтобы каждый элемент был выровнен, требует, чтобы сама структура была выровнена по наибольшему типу элемента.Поскольку все типы элементов char
, выравнивание равно 1
, поэтому заполнение не требуется.(Для массивов учитывается базовый тип (все удаленные экстенты).)
Подумайте о создании массива вашей структуры: вам понадобятся все члены всех элементовэтот массив для выравнивания.Но в вашем случае это всего лишь один большой массив символов, поэтому нет необходимости в заполнении.
Например, предположим, что на вашей платформе sizeof(short) == 2
и это выравнивание равно размеру, и рассмотрим struct X { char a; short b; char c; };
.Затем существует одно байтовое внутреннее заполнение между a
и b
для правильного выравнивания b
, но также одно байтовое заполнение терминала после c
, так что вся структура имеет размер, кратный 2
, наибольшему членуразмер.Таким образом, когда у вас есть массив X arr[10]
, все элементы arr
будут правильно выровнены по отдельности.