Шаг 54.
Регистровый класс памяти (register)

    На этом шаге мы познакомимся с регистровыми переменными.

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

    Описание может выглядеть, например, так:

   register int n;
   register char c;
   register int *px;

    Использование регистровых переменных приводит к меньшим по размерам и более быстрым программам.

    Компилятор C++ автоматически выполняет оптимальное распределение регистров в соответствии с потоком данных. Этим снята необходимость обязательного указания переменных программы как регистровых, так что описание register идентично по смыслу описанию auto и никакого другого смысла не имеет.

    Регистровый класс памяти могут иметь только простые переменные (char, int, указатели и т.д.). Регистровые переменные инициализируются каждый раз при входе в функцию или блок. Для регистровых переменных инициализирующее выражение не обязательно должно быть константой: оно может быть любым выражением, включающим определенные ранее величины и обращения к функциям.

    Если явная инициализация отсутствует, то регистровые переменные имеют в таком случае неопределенные значения.

    Следует заметить, что не обязательно все регистровые переменные будут действительно храниться в регистрах. Компилятор должен сравнить ваши требования с количеством доступных регистров, поэтому вы можете и не получить то, что хотите. В этом случае переменная становится простой автоматической.

    К регистровым переменным не может быть применена операция "&" (получения адреса), таким образом, если в программе не используются адреса некоторых переменных, то эффективнее использовать для этих переменных регистры.

    Таким образом, класс памяти определяет область действия переменной и продолжительность ее существования в памяти. Класс памяти устанавливается при описании переменной с соответствующим ключевым словом. Переменные, определенные вне функции, являются автоматическими и локальными, если только не используются другие ключевые слова. Внешние переменные, определенные раньше функции, доступны ей, даже если не описаны внутри ее.

Таблица 1. Классы памяти, определяемые внутри функции
Класс памяти
Ключевое слово
Продолжительность существования
Область действия
Автоматический
auto
Временно
Локальная
Статический
static
Постоянно
Локальная
Регистровый
register
Временно
Локальная
Таблица 2. Классы памяти, определяемые вне функции
Класс памяти
Ключевое слово
Продолжительность существования
Область действия
Внешний
extern
Постоянно
Глобальная (все файлы)
Внешний статический
static
Постоянно
Глобальная (один файл)

    Классы памяти, перечисленные в первой таблице, описываются внутри функции. Классы памяти, перечисленные во второй таблице, описываются вне функции.

    На следующем шаге мы познакомимся с рекурсией.


Предыдущий шаг Содержание Следующий шаг