Обычно реализация C не будет заполнять структуру, содержащую один однобайтовый член. Более строгое выравнивание может быть вызвано стандартным ключевым словом _Alignas
или другими способами, и в этом случае структура может содержать больше отступов, чем данных.
Однако мы можем создать нормальные структуры с большим количеством отступов, чем данных. Рассмотрим struct { char a; double b; char c; }
в реализации C, где double
- это восемь байтов и требует выравнивания по восемь байтов. Чтобы разложить эту структуру, реализация должна вставить (как минимум) семь байтов заполнения между a
и b
и должна вставить (как минимум) еще семь байт после c
, чтобы размер структуры был кратен восьми байтам (который необходим для того, чтобы элементы в массиве таких структур сохранили свои требуемые выравнивания).
Эта структура имеет десять байтов данных в своих членах и четырнадцать байтов заполнения.