Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 100
Задача 5: Размер структуры с padding
ОглавлениеВы должны вычислить размер в байтах структуры, содержащей один элемент типа char, за которым следует элемент типа int. Учтите, что компилятор выравнивает поля структуры в памяти так, чтобы каждый элемент начинался по адресу, кратному его собственному размеру. Это может привести к вставке дополнительных неиспользуемых байтов (padding) между полями или в конце структуры, чтобы удовлетворить требованиям выравнивания. Не предполагайте, что размер структуры равен сумме размеров её полей – вместо этого рассмотрите, как именно происходит выравнивание на типичной архитектуре, где sizeof(int) равен 4.
Подсказка: после поля char c (размер 1 байт) компилятор вставляет 3 байта выравнивания, чтобы поле int i начиналось с адреса, кратного 4. Таким образом, первые 4 байта содержат c и padding, следующие 4 байта – значение i. Общий размер структуры выравнивается также до кратного размеру её самого выравниваемого поля, что в итоге даёт 8 байт.