Рассмотрим структуры:
struct S1 {
int a;
char b;
};
struct S2 {
struct S1 s; /* struct needed to make this compile as C without typedef */
char c;
};
// For the C++ fans
struct S3 : S1 {
char c;
};
Размер S1 равен 8, что ожидается из-за выравнивания. Но размер S2 и S3 равен 12. Это означает, что компилятор их структурирует как:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
| a | b | padding | c | padding |
Компилятор может разместить c в дополнении в 6 7 8 без нарушения ограничений выравнивания. Каково правило, которое его предотвращает, и в чем причина этого?