Стандарт языка не делает никаких заявлений о заполнении. Правила выравнивания зависят от платформы (т. Е. Вы должны выровнять по-разному, например, на процессоре PowerPC, чем на процессоре x86_64), и они определяются реализацией, что означает, что ваш компилятор может выполнять любые действия (и может изменить это поведение другой командой опции или после обновления версии).
Я твердо верю, что любая рекомендация в духе "это обычно то или другое" вводит в заблуждение и, возможно, опасна.
Вы можете написать тестовую программу, которая выполнит пару операторов sizeof()
и / или offsetof()
и напишет для вас заголовок, содержащий несколько #define
с указанием используемых заполнителей.
Вы можете использовать autoconf
, чтобы сделать это для вас.
По крайней мере, вы должны добавить операторы assert( sizeof( ... ) )
в начале вашей функции main()
, чтобы получать информацию, когда ваши предположения неверны.