Размер данной структуры

struct x
{
    char a : 1; // statement 1
    char c : 3; // statement 2
};

какой будет размер, если эта структура. Что означает утверждение 1 и 2?

1 ответов


эти заявления объявить битовые поля.
Это значит a занимает памяти 1 бит и c занимает памяти 3 бит.

размер структуры будет:
Хотяб 4 бита + padding (bits)

и, скорее всего, это будет 8 bits Я.е: 1 byte

, потому что
Если ряд битовых полей не складывается до размера int, может иметь место заполнение. Размер обивка определяется выравнивающими характеристиками элементов конструкции.

что такое битовые поля?
из документации IBM:

и C, и C++ позволяют хранить целочисленные члены в пространствах памяти меньше, чем обычно позволяет компилятор. Эти компактные элементы структуры называются битовыми полями, и их ширина в битах может быть явно объявлены. Битовые поля используются в программах, которые необходимо заставить структуру данных соответствовать фиксированному аппаратному представлению и вряд ли будет переносимой.

синтаксис объявления битового поля выглядит следующим образом:

>>-type_specifier--+------------+--:--присваиваемое--;--->

объявление битового поля содержит спецификатор типа, за которым следует необязательный Декларатор, двоеточие, постоянное целочисленное выражение, указывающее ширину поля в битах, и точка с запятой. Объявление битового поля не может использовать квалификаторы типа const или volatile.