Клас пам'яті (англ. Storage class) — поняття в мовах програмування, визначає місце зберігання об'єктів програми (наприклад, функцій та змінних) в оперативній пам'яті або регістрах процесора та час існування таких об'єктів.

В окремих мовах програмування існують оператори визначення класу пам'яті, в інших клас пам'яті призначається на розсуд транслятора.

Класи пам'яті в мовах C та C++

ред.

Мови C та C++ дають змогу безпосередньо визначати клас пам'яті об'єктів в програмі. Кожен об'єкт може належати лише до одного класу пам'яті, який визначається відповідними ключовими словами або встановлюється компілятором за умовчанням:

  • автоматичні — для змінних, визначених в функціях або складених операторах (блоках);
  • зовнішні — для змінних, визначених за межами функцій, також для імен функцій.

Клас пам'яті може бути встановлений ключовими словами:

  • auto — автоматичний локальний об'єкт програми. Автоматичні змінні створюються під час кожного входу в функцію або блок і знищуються у разі виходу з блоку або функції. Як наслідок, вони можуть бути доступні лише в межах відповідної функції або блоку від точки свого визначення. Такі об'єкти не зберігають значення між входами в функцію або блок. Якщо автоматичний об'єкт не ініціалізований, його значенням буде «сміття» (що є наслідком розміщення цих об'єктів в стеку та перерозподілу стеку між входами у функцію або блок);
  • static — статичний об'єкт програми. Статичні об'єкти створюються під час запуску програми і знищуються у разі її завершення. Якщо статичний об'єкт не ініціалізований, його значенням буде «0» або еквівалентне значення. В свою чергу:
    • статичні локальні об'єкти доступні лише в межах функції або блоку від точки свого визначення до кінця блоку або функції; об'єкти зберігають значення між входами в функцію або блок;
    • статичні глобальні об'єкти (змінні і функції) доступні лише в межах модуля, в якому вони визначені;
  • extern — зовнішній глобальний об'єкт. Використовується для звернення до глобальних об'єктів програми (змінних), визначених в іншому модулі програми (при цьому для об'єкта має бути одне визначення — без extern, і може бути декілька декларацій в різних модулях — всі з extern);
  • register — регістрова змінна. В сучасних компіляторах ігнорується, оскільки компілятор здатен забезпечити більш ефективне використання регістрів процесора, ніж програміст; в старих реалізаціях компіляторів використання класу register давало змогу значно підвищити швидкість виконання програми.

Посилання

ред.