Хелпикс

Главная

Контакты

Случайная статья





Битовые поля. Объединения (union)



Битовые поля

Битовые поля – это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти – 1 байт, а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа).

Битовые поля могут быть любого целого типа. Доступ к полю осуществляется обычным способом – по имени. Адрес поля получить нельзя, однако в остальном битовые поля можно использовать точно так же, как обычные поля структуры. Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, так как компилятор должен генерировать специальные коды, и экономия памяти под переменные оборачивается увеличением объема кода программы. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.

Объединения (union)

Объединение (union) представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо ключевого слова struct используется слово union. Длина объединения равна наибольшей из длин его полей. В каждый момент времени в переменной типа объединение хранится только одно значение.

Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется.

Объединение часто используют в качестве поля структуры, при этом в структуру удобно включить дополнительное поле, определяющее, какой именно элемент объединения используется в каждый момент. Имя объединения можно не указывать, что позволяет обращаться к его полям непосредственно.

Объединения применяются также для разной интерпретации одного и того же битового представления (но, как правило, в этом случае лучше использовать явные операции преобразования типов).

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

- объединение может инициализироваться только значением его первого элемента;

- объединение не может содержать битовые поля;

- объединение не может содержать виртуальные методы, конструкторы, деструкторы и операцию присваивания;

- объединение не может входить в иерархию классов.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.