Вы не говорите, знаете ли вы, что такое битовые поля, но я предполагаю, что вы знаете.
В вашей реализации, очевидно, unsigned int
- это 32-разрядное целое число, занимающее 4 байта. Это объясняет первый и второй примеры. Ясно, что 3 битовых поля, в сумме 33 бита, не помещаются в один unsigned int
, поэтому в первом примере требуется 8 байтов. 3 битовых поля, в сумме 3 бита, безусловно, вписываются в unsigned int
, поэтому во втором примере только 4 байта.
Кроме того, битовое поле не может охватывать несколько целых чисел. Это объясняет третий пример. Я не могу вспомнить, является ли это требованием стандарта, или просто деталь вашей реализации. В любом случае, поскольку b
составляет 32 бита, он заполняет целое unsigned int
самостоятельно, заставляя оба из a
и c
занимать свои собственные unsigned int
, до и после среднего. Следовательно, 12 байтов.