Класс памяти
Класс памяти переменной (англ. Storage class) — понятие в некоторых языках программирования. Он определяет область видимости переменной, а также как долго переменная находится в памяти.
Классы памяти в C и C++
Переменная языках программирования C и C++ должна принадлежать ровно одному классу памяти, что указывается с помощью ключевого слова, который пишется перед типом переменной.
auto
— автоматическая (локальная). Автоматические переменные создаются при входе в функцию и уничтожаются при выходе из неё. Они видны только внутри функции или блока, в которых определены. В C++11 значение словаauto
изменили.static
— статическая переменная (локальная). 1) Если static — внутри функции. Для таких переменных область видимости обычная (внутри функции), но время жизни постоянное (значение сохраняется между вызовами функции). 2) static вне функции имеет другое значение.extern
— внешняя (глобальная) переменная. Внешние переменные доступны везде, где описаны, а не только там, где определены. Использование ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. Для таких переменных связывание с адресом происходит на этапе компоновки.register
— регистровая переменная (локальная). Это слово является всего лишь «рекомендацией» компилятору помещать часто используемую переменную в регистры процессора для ускорения программы.
Класс памяти можно не указывать, тогда действуют следующие умолчания:
- переменные, описанные внутри функции или блока, считаются локальными (auto)
- переменные, описанные вне всех функций, считаются внешними.
- функции считаются внешними.
Статическая переменная, описанная вне любой функции, становится внешней статической. Разница между внешней переменной и внешней статической переменной заключается в области их действия. Обычная внешняя переменная может использоваться функциями в любом файле, а внешняя статическая переменная может использоваться только функциями того же самого файла, причем после определения переменной.
OpenMP
Для обеспечения параллельного исполнения потоков в OpenMP предусмотрено 2 класса переменных: shared (общие, синхронизируемые) и private (локальные для каждого потока).
Ссылки
- Классы памяти и область действия глава из книги "Основы программирования на языке C", Н.А. Калинина, Н.И. Костюкова ISBN 978-5-9556-0057-4, Интуит.ру