Поскольку a
и c
не являются смежными, каждый из них резервирует полный объем памяти целого числа int.Если вы переместите a
и c
вместе, размер структуры станет 8 байтов.
Более того, вы сообщаете компилятору, что a
должен занимать только 1 бит , а не 1 байт.Таким образом, даже если a
и c
рядом друг с другом должны занимать всего 3 бита (все еще под одним байтом), комбинация a
и c
по-прежнему выравнивается по слову в памяти на 32-битной памяти.машина, следовательно, занимающая целые 4 байта в дополнение к int b
.
Аналогично, вы обнаружите, что
struct s{
unsigned int b;
short s1;
short s2;
};
занимает 8 байтов, тогда как
struct s{
short s1;
unsigned int b;
short s2;
};
занимает 12 байтов, поскольку в последнем случае каждое из двух шорт находится в своем 32-битном выравнивании.