Клас пам'яті
Клас пам'яті (англ. Storage class) — поняття в мовах програмування, визначає місце зберігання об'єктів програми (наприклад, функцій та змінних) в оперативній пам'яті або регістрах процесора та час існування таких об'єктів.
В окремих мовах програмування існують оператори визначення класу пам'яті, в інших клас пам'яті призначається на розсуд транслятора.
Класи пам'яті в мовах C та C++
ред.Мови C та C++ дають змогу безпосередньо визначати клас пам'яті об'єктів в програмі. Кожен об'єкт може належати лише до одного класу пам'яті, який визначається відповідними ключовими словами або встановлюється компілятором за умовчанням:
- автоматичні — для змінних, визначених в функціях або складених операторах (блоках);
- зовнішні — для змінних, визначених за межами функцій, також для імен функцій.
Клас пам'яті може бути встановлений ключовими словами:
auto
— автоматичний локальний об'єкт програми. Автоматичні змінні створюються під час кожного входу в функцію або блок і знищуються у разі виходу з блоку або функції. Як наслідок, вони можуть бути доступні лише в межах відповідної функції або блоку від точки свого визначення. Такі об'єкти не зберігають значення між входами в функцію або блок. Якщо автоматичний об'єкт не ініціалізований, його значенням буде «сміття» (що є наслідком розміщення цих об'єктів в стеку та перерозподілу стеку між входами у функцію або блок);static
— статичний об'єкт програми. Статичні об'єкти створюються під час запуску програми і знищуються у разі її завершення. Якщо статичний об'єкт не ініціалізований, його значенням буде «0» або еквівалентне значення. В свою чергу:- статичні локальні об'єкти доступні лише в межах функції або блоку від точки свого визначення до кінця блоку або функції; об'єкти зберігають значення між входами в функцію або блок;
- статичні глобальні об'єкти (змінні і функції) доступні лише в межах модуля, в якому вони визначені;
extern
— зовнішній глобальний об'єкт. Використовується для звернення до глобальних об'єктів програми (змінних), визначених в іншому модулі програми (при цьому для об'єкта має бути одне визначення — без extern, і може бути декілька декларацій в різних модулях — всі з extern);register
— регістрова змінна. В сучасних компіляторах ігнорується, оскільки компілятор здатен забезпечити більш ефективне використання регістрів процесора, ніж програміст; в старих реалізаціях компіляторів використання класу register давало змогу значно підвищити швидкість виконання програми.
Посилання
ред.- Класс памяти [Архівовано 30 Грудня 2016 у Wayback Machine.] (рос.)