Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Відповіді на питання по мові С++по лекціям.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
265.22 Кб
Скачать
  1. Довгочасність існування області зберігання, області видимості та компоновки.

У мові С++ використовуються три різні моделі збереження даних. Вони відрізняються між собою довгочасністю збереження даних у пам’яті:

  • Автоматична довгочасність зберігання. Її мають змінні, що об’явлені всередині визначення функції. Вони створюються, коли виконується функція або блок, де змінні визначені. Після виходу із блоку або функції застосовуємо змінними пам’ять, яка звільнюється. У С++ існує два види автоматичних змінних.

  • Статистична довгочасність зберігання. Її мають змінні, що визначені зовні визначення функції, або об’явлені з ключовим словом static. Вони існують у продовж усього часу виконання програм. У С++ існують три види статистичних змінних.

  • Динамічна довгочасність зберігання. Пам’ять, яку виділяємо операцією new, зберігаємо до тих пір, аж поки вона не буде звільнена за допомогою операції delete або до завершення програми, дивлячись яка подія наступить раніше. Іноді цю пам’ять називають вільною областю пам’яті.

  1. Область видимості і зв’язування.

Область видимості визначає доступність імені у межах файлу (одиниці трансляції). Наприклад, змінна, що визначена у функції, може бути застосована тільки у цій функції, у той час як змінні визначені у файлі до визначення функції, можуть застосовуватися у всіх функціях. Зв’язування визначає сумісне використання імені у різних одиницях трансляції. Ім’я з зовнішнім зв’язуванням може бути використовані різними файлами, а ім’я з внутрішнім зв’язуванням – це функція у межах одного файлу. Імена автоматичних змінних не мають ніякого зв’язування, оскільки вони не допускають сумісного використання у програмі.

У мові С++ змінна має одну із декількох можливих областей видимості. Змінна, що має локальну область видимості (у межах блоку), видима тільки у межах цього блоку, у котрому вона визначена. Блок – це група операторів, що замкнуті у фігурні скобки. Наприклад, тіло функції є блоком, однак це тіло може бути вкладено у інші блоки. Змінна, що має глобальну область видимості (область видимості файлу), доступна у всьому файлі, починаючи з позиції, де вона була визначена. Автоматичні змінні мають локальну область видимості, а статистичні змінні мажуть мати різну область видимості в залежності від того, як вони визначені. Імена, що застосовані в області видимості прототипу функції, доступні тільки у межах круглих скобок, котрі містять список аргументів. Елементи, що об’явлені у межах класу, мають видимість у межах цього класу. Змінні, що об’явлені у просторі імен, мають область видимості у межах простору імен. Глобальна область видимості є окремим випадком області простору імен.

Функції можуть мати область видимості класу або область видимості простору імен, включаючи глобальну область видимості, але не можуть мати локальну область видимості.

Різні засоби збереження даних характеризуються часом існування, областю видимості і зв’язуванням. Розглянемо більш досконало властивості пам’яті С++.

  1. Автоматична довгочасність збереження.

Параметри функції і змінних, що об’явлені всередині функції, за замовчуванням мають автоматичну довгочасність збереження. Вони мають локальну область видимості і не мають зв’язування. Іншими словами, коли об’явити змінну з іменем texas у функції main (), а потім об’явити ще одну змінну тим же ім’ям у функції oil (), то будуть дві незалежні змінні, кожна з яких буде доступна тільки у тій функції, у котрій об’явлена. Після завершення роботи функції всі її змінні зупинять своє існування. Зверніть увагу, що змінній виділяється пам’ять, коли програма передає управління блоку, у якому змінна визначена, але область видимості починається тільки після позиції об’явлення.