Лабораторный практикум по основам языка C/С++ |
Тема 3.6. Объединения
Объединения – это структурированный тип данных, который может, как и структура, хранить разнородные данные. Однако в случае объединений данные занимают одну и ту же область памяти.
На диаграмме, представленной ниже показано расположение в памяти полей структуры s_worker
и объединения u_worker
. В случае структуры, поля расположены в памяти друг за другом, то есть как только заканчивается память, выделенная для поля salary
, начинается область памяти, выделенная для поля taxes
. В случае объединения, области всех полей начинаются в одном месте.
Поля объединения накладываются друг на друга. Общий объем занимаемой памяти равен размеру самого большого поля.Изменение значения любого поля объединения меняет значения других полей.
Преимущество использования объединений в экономии оперативной памяти. Кроме того, объединения позволяют создавать весьма специфические типы данных. Например, вместо того, чтобы пересылать по сети четыре значения от 0 до 255 (1 байт) можно преобразовать их к целому беззнаковому типу (int
занимает 4 байта) и передать лишь одно значение. Затем на компьютере-получателе вновь разрезать целоне на части.
Использование битовых карт
В первом разделе было сказано, что структура, поля которой могут хранить лишь один бит называются битовыми картами. Рассмотрим как можно использовать такие структуры. Напомним как выглядит битовая структура байта:
Создадим объединение, которое будет использовать данную структуру для двоичного представления кода символа.
Пример результата работы данной программы: