Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / Lexs_7_klaccy_pamjt.doc
Скачиваний:
22
Добавлен:
17.05.2015
Размер:
179.2 Кб
Скачать

Класи пам'яті

1. Класи пам'яті та види дій імен змінних. Область видимості та час життя

Кожна змінна і функція, описана в програмі мовою C++, належить до якогось класу пам'яті. Клас пам'яті змінної визначає час її існування (час життя об'єкта), область видимості й місце, де об'єкт розташовується (внутрішні регістри процесора, сегмент даних, сегмент стека). Область видимості – це область початкового коду програми, з якого можливий коректний доступ до пам'яті або функції з використанням ідентифікатора. Час життя визначає час існування змінної в процесі виконання програми. З погляду часу життя об'єкта розрізнюють три типи об'єктів: статичні, локальні та динамічні.

Об'єкти зі статичною тривалістю життя отримують розподіл пам'яті на початку виконання програми – такий розподіл пам'яті зберігається до виходу з програми, розміщується в сегменті даних.

Об'єкти з локальною тривалістю життя створюються при вході в функцію, а при виході з функції знищуються, розміщуються в стеку чи регістрах.

Об'єкти з динамічною тривалістю життя створюються і знищуються спеціальними функціями керування пам'яттю, розміщуються в купі.

Існують чотири області видимості змінних: блок, функція, прототип функції і файл. Змінні, оголошені всередині блоку, мають областю дії блок. Блок починається оголошенням змінних і закінчується кінцевою правою фігурною дужкою блоку. Якщо блоки вкладені і змінна у зовнішньому блоці має таке саме ім'я, як змінна у внутрішньому блоці, змінна зовнішнього блоку невидима до моменту завершення роботи внутрішнього блоку. Змінні, оголошені на початку функції, областю видимості мають блок, який повністю містить тіло функції. Змінні, оголошені всередині прототипу функції, мають спеціальну область видимості, яка простягається від точки оголошення до кінця прототипу функції. Змінні, оголошені поза будь-якою функцією, мають областю дії файл.

Можливість роботи з різними класами пам'яті в процесі програмування дає програмісту механізм створення гнучких з погляду використання ОЗП програм. Клас пам'яті, що призначається змінній, визначає не лише тривалість збереження її значень, а й також спосіб інформаційного зв'язку з іншими функціями, які теж працюють з цією змінною. У мові C++ розрізняють чотири класи пам'яті, які означаються такими ключовими словами:

• auto (автоматична пам'ять);

• extern ( зовнішня пам'ять);

• static (статична пам'ять);

• register (регістрова пам'ять).

Визначення класу пам'яті для змінної відбувається на етапі її оголошення в програмі. За замовчуванням, тобто якщо не задається програмістом, змінній призначається клас auto. Клас пам'яті для змінної задається або за розташуванням її опису, або за допомогою специфікаторів класу, перелічених вище. Специфікатори передують оголошенню змінної.

2. Автоматичні змінні

Автоматичні змінні, або ж auto, описуються всередині відповідної функції і ділянка їх дії лежить у межах даної функцій тобто змінна починає існування в момент активізації функції і зникає в момент завершення функції. Ще автоматичні змінні називають локальними. Спроба роботи з локальною змінною в інших функціях призводить до помилок. Оскільки за замовчуван­ням змінним призначається клас auto, то ключове слово auto можна не використовувати.

Два наведені нижче записи можна вважати еквівалентними.

float a, b;

auto float a, b;

Область видимості змінної автоматичного класу пам'яті починається з її визначення і завершується при виявленні кінця блоку, в якому ця змінна визначена. Доступ до таких змінних із зовнішнього блоку неможливий. Оскільки локальні змінні знищуються при виході з функції, в якій вони оголошені, то ці змінні не можуть зберігати значення між викликами функцій. Якщо не визначене місце для зберігання локальних змінних, то вони зберігаються в стеку. Пам'ять для автоматичних змінних відводиться динамічно під час виконання програми при вході в блок, у якому описана відповідна змінна. При виході з блоку пам'ять, відведена під усі його автоматичні змінні, автоматично звільняється. Звідси й походить термін автоматичні змінні. Доступ до автоматичних змінних можливий лише з блоку, де змінні описані, оскільки до моменту входу в блок змінна взагалі не існує і пам'ять під неї не виділена.

Соседние файлы в папке lexzii_08