Лекція 4. Класи пам'яті. Логічні вирази. Керуючі структури
| Сайт: | Навчально-інформаційний портал НУБіП України |
| Курс: | Основи програмування |
| Книга: | Лекція 4. Класи пам'яті. Логічні вирази. Керуючі структури |
| Надруковано: | Гість-користувач |
| Дата: | неділя, 15 лютого 2026, 19:46 |
1. Сегменти пам'яті
Кожна змінна крім типу визначається своєю областю дії й часом існування (протягом виконання всієї програми, або лише в окремому блоці). Для підвищення ефективності використання пам'яті програма складається з 4 частин (сегментів):
1. Сегмента коду, де розміщаються коди програм;
2. Сегмента даних, де розміщаються глобальні й статичні змінні, які існують протягом усього часу виконання програми;
3. Сегмента стека, де розміщаються локальні й реєстрові змінні;
4. Додаткового сегмента.
Крім цього, є ще п'ята область - для запису динамічних змінних - "куча" (heap).
Стек - це область пам'яті, у якій запис походить від більших адрес до менших, а зчитування у зворотному напрямку. Інакше говорять, що реалізується дисципліна - перший прийшов, останнім обробився.
2. Класи пам'яті
Клас пам'яті визначає місце, де розташований об'єкт (внутрішні регістри процесора, сегмент даних, сегмент стека) і одночасно час існування.
У мові С++ існують 4 класу пам'яті:
1. Автоматична (auto);
2. Реєстрова (register);
3. Статична (static);
4. Зовнішня (extern).
ВІДПОВІДНО до класу пам'яті, де розміщається змінна, можна називати й змінну -автоматичної, реєстрової, статичної або зовнішньої.
3. Типи змінних
Глобальні змінні є глобальними й доступні будь-яким функціям. Вони визначаються поза функціями.
Однак, якщо опис глобальних змінних передував певній функції, то він може бути опущений. Таким чином, опис глобальних змінних діє на всі функції, які розташовані нижче. Як і для статичних змінних, ініціалізація зовнішніх змінних відбувається один раз під час компіляції. По умовчуванню привласнюється значення нуль.
Статичні й глобальні змінні розміщаються в сегменті даних. Якщо програми складається з декількох файлів, то дія статичних змінних поширюється лише на один файл, де вони описані.
Зовнішні змінні діють у межах декількох файлів, але їх описи повинні бути продубльовані.
У міру можливості слід уникати використання в програмах глобальних змінних. Однак якщо ваша програма повинна використовувати глобальну змінну, то може трапитися, що ім'я глобальної змінної конфліктує з іменем локальної змінної. При виникненні такого конфлікту C++ надає пріоритет локальної змінної. Інакше кажучи, програма припускає, що у випадку конфлікту кожне посилання на ім'я відповідає локальної змінної.
Автоматичні змінні
Описуються в блоці таким чином { auto int a=123;
auto char b;
auto float c=45.28; }
Реєстрові змінні
Можуть розміщатися як в оперативній пам'яті, так і в регістрах. Використання регістрів зменшує кількість пересилань і прискорює виконання програми. Тому можливе використання реєстрових змінних, опис яких має вигляд
{register int x=2; }
Однак оскільки мовам високого рівня регістри недоступні, про їхній стан відомо тільки компіляторові, то використання регістрів буде можливо тільки тоді, коли є вільний регістр, і якщо регістр може вмістити відзначену змінну.
Інакше компілятор розмістить цю змінну в оперативній пам'яті й вона буде звичайної автоматичної змінною. Тому використання реєстрових змінних недоцільне.
Як видне, автоматичні й реєстрові змінні мають локальний характер, тому їх розміщають у сегменті стека.
Статистичні змінні
Задаються описом
{ static int а;
static float b=3.15; }
Як і для автоматичних, область дії статичних змінних є блоком. Відрізняються вони від автоматичних тим, що після виходу із блоку їх значення зберігається. Воно буде початковим при наступному вході в цей блок.
Глобальні змінні
Глобальні змінні є глобальними й доступні будь-яким функціям. Вони визначаються поза функціями.
Однак, якщо опис глобальних змінних передував певній функції, то він може бути опущений. Таким чином, опис глобальних змінних діє на всі функції, які розташовані нижче. Як і для статичних змінних, ініціалізація зовнішніх змінних відбувається один раз під час компіляції. За замовчуванням привласнюється значення нуль.
У міру можливості слід уникати використання в програмах глобальних змінних. Однак якщо ваша програма повинна використовувати глобальну змінну, то може трапитися, що ім'я глобальної змінної конфліктує з іменем локальної змінної. При виникненні такого конфлікту C++ надає пріоритет локальної змінної. Інакше кажучи, програма припускає, що у випадку конфлікту, кожне посилання на ім'я відповідає локальній змінній.
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу