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