Класи пам’яті в Сі
отримуйте знання тут
Класи пам'яті в Сі
Які класи пам'яті існують у мові сі?
Що таке клас пам'яті в сі?
Класи пам'яті в C
Клас пам'яті auto
Звичайна змінна, оголошена всередині блоку без вказівки на неї іншого класу, має клас пам'яті auto за замовчуванням.
Така змінна видно усередині блоку.
Змінні з класом пам'яті auto розміщуються у стеку.
Отже, за умовчанням локальна змінна має клас пам'яті auto.
Клас пам'яті
Змінні, оголошені як static, тобто. статичні, зберігають своє значення між дзвінками. Приклад для змінних static:
Отримуємо:
При другому виклик значення змінної з класом пам'яті auto, тобто. autoVar у цьому прикладі загубилося, а значення змінної static, тобто. Статичнийвар в цьому прикладі зберігся.
Ще одна тонкість. static змінна ініціалізується лише один раз. Якби це було інакше, то значення статичної статичноївари обнулилося б при повторному виклику.
За замовчуванням усі глобальні змінні статичні. І видно вони лише у своєму файлі.
Статичні функції в Сі
Якщо функцію оголошено як static, тобто. статична, вона видно тільки у своєму файлі. З іншого файлу до static функції звернутися не можна. Таким чином, ключове слово static стосовно функцій C означає їх закритість для звернень з інших файлів програми. приклад. Оголосимо в окремому модулі дві функції: одну статичну, а іншу звичайну:
static функція staticFunc буде доступна лише у цьому модулі. Проста функція simpleFunc доступна інших модулів програми, тобто. її клас пам'яті extern. Пам'ять extern встановлюється для стандартних функцій. Код основногомодуля:
Клас пам'яті extern у C
Приклад основного модуля:
та іншого модуля програми:
Отримуємо:
Клас пам'яті register у C
Застосування модифікатора register є рекомендацією компілятору зберігати цю змінну в регістрі, а не в оперативній пам'яті. Не факт, що так буде. Якщо програма часто звертається до змінної, то є сенс оголосити її модифікатором register. Приклад:
Застосовувати register можна тільки до вказівників і цілого типу. Використовувати register можна і за умови вказівки формальних параметрів функцій. Приклади: