На этом шаге мы познакомимся с регистровыми переменными.
Объекты, описанные внутри блока с классом памяти register, называются регистровыми переменными. Они подчиняются всем правилам, касающимся автоматических переменных. Описание register указывает компилятору, что данная переменная будет часто использоваться.
Описание может выглядеть, например, так:
register int n; register char c; register int *px;
Использование регистровых переменных приводит к меньшим по размерам и более быстрым программам.
Компилятор C++ автоматически выполняет оптимальное распределение регистров в соответствии с потоком данных. Этим снята необходимость обязательного указания переменных программы как регистровых, так что описание register идентично по смыслу описанию auto и никакого другого смысла не имеет.
Регистровый класс памяти могут иметь только простые переменные (char, int, указатели и т.д.). Регистровые переменные инициализируются каждый раз при входе в функцию или блок. Для регистровых переменных инициализирующее выражение не обязательно должно быть константой: оно может быть любым выражением, включающим определенные ранее величины и обращения к функциям.
Если явная инициализация отсутствует, то регистровые переменные имеют в таком случае неопределенные значения.
Следует заметить, что не обязательно все регистровые переменные будут действительно храниться в регистрах. Компилятор должен сравнить ваши требования с количеством доступных регистров, поэтому вы можете и не получить то, что хотите. В этом случае переменная становится простой автоматической.
К регистровым переменным не может быть применена операция "&" (получения адреса), таким образом, если в программе не используются адреса некоторых переменных, то эффективнее использовать для этих переменных регистры.
Таким образом, класс памяти определяет область действия переменной и продолжительность ее существования в памяти. Класс памяти устанавливается при описании переменной с соответствующим ключевым словом. Переменные, определенные вне функции, являются автоматическими и локальными, если только не используются другие ключевые слова. Внешние переменные, определенные раньше функции, доступны ей, даже если не описаны внутри ее.
Классы памяти, перечисленные в первой таблице, описываются внутри функции.
Классы памяти,
перечисленные во второй таблице, описываются вне функции.
На следующем шаге мы познакомимся с рекурсией.