Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.01.2021
Размер:
7.39 Кб
Скачать

Інформатика — Вступ    Автори

|

Контакти

|

Підсистема допомоги

|

Методичні вказівки

|

Анотація

|

Назад

   ІнформатикаДинамічна пам'ять : ВступЗміст курсу

Вступ

Теорія

Операції роботи з пам'яттю

Практика

Практичне заняття

Висновки

Версія для друку

  Динамічна пам'ять      У традиційних мовах є три види пам'яті й, відповідно, три різних види змінних: статична пам'ять, стекова пам'ять, динамічна пам'ять.

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

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

     Нарешті, є динамічна пам'ять, або "купа" (heap). На розмір динамічної пам'яті в сучасних операційних системах практично немає обмежень. Частина її розміщається у фізичній пам'яті комп'ютера, частина витісняється ("свопується") на диск. Для розміщення об'єкта в динамічній пам'яті варто спочатку захопити достатній шматок пам'яті, в C++ це робиться за допомогою оператора new. Після того, як об'єкт стає непотрібним, варто звільнити займану їм пам'ять, в C++ для цього використовується оператор delete. Об'єкти, створені в динамічній пам'яті, протягом усього часу їхнього існування мають постійну адресу, так само як і статичні об'єкти. Головний недолік динамічної пам'яті полягає в тому, що захват і звільнення пам'яті -- вкрай повільні операції, причому пророчити час їхнього виконання заздалегідь неможливо. Зв'язано це з тим, що вільне місце в динамічній пам'яті фрагментовано, і на пошук підходящого шматка й підтримки структури динамічної пам'яті може йти багато часу. До того ж від програміста потрібна акуратність, щоб не забути в потрібному місці звільнити захоплену раніше пам'ять.

 © 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS

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