Купа (пам'ять) - це

організація

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

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

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

Принцип роботи

Для розміщення і видалення динамічних об'єктів використовуються примітиви «створити об'єкт» (наприклад, malloc) і «видалити об'єкт» (наприклад, free). Крім того, перед початком роботи програми виконується ініціалізація купи, в ході якої вся спочатку виділена під купу пам'ять відзначається як вільна.

При видаленні об'єкта реалізація примітиву «видалити об'єкт» зазначає, що область, раніше використана видаляється об'єктом, тепер вільна.

У проміжках між викликами примітивів «створити об'єкт» і «видалити об'єкт» виділена під об'єкт область пам'яті не може бути віддана ні під який інший об'єкт. Тому додаток може вільно користуватися виділеної йому областю пам'яті. У той же час, після виклику примітиву «видалити об'єкт» звільнена область може бути використана повторно або віддана операційній системі, тому використання покажчика, отриманого раніше від примітиву «створити об'єкт», буде приводити до збоїв або непередбачуваною роботі програми.

Виклики функцій бібліотек зазвичай відбуваються швидше і вимагають менше ресурсів на виконання, ніж виклики системних переривань або системних API -функцій.

Алгоритми купи і продуктивність

Блоки бувають вільні і зайняті. Для можливості виділення пам'яті шляхом повторного використання вільного блоку (без дорогого збільшення купи в цілому - вимагає системного виклику) в тому чи іншому вигляді потрібен список вільних блоків.

Для скорочення списку вільних блоків з метою зменшення часу його обходу завжди має сенс зливати 2 або 3 поспіль вільних блоку в один. Якщо вільний наступний блок, то його легко знайти, відступивши вперед на розмір вивільняється блоку. З попереднім блоком все складніше, і тому має сенс зберігати розмір попереднього блоку (для його пошуку) в заголовку будь-якого блоку.

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

Дуже гарною реалізацією є кілька списків, кожен для свого розміру. Це дозволяє швидко проігнорувати свідомо занадто маленькі вільні блоки цілими списками, без перевірки кожного персонально.

Дивитися що таке "Купа (пам'ять)" в інших словниках:

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

Динамічно розподіляється пам'ять - Динамічна пам'ять оперативна пам'ять комп'ютера, що надається програмою (процедурі, підпрограмі) при її роботі. Динамічне розміщення даних означає розподіл динамічної пам'яті безпосередньо при роботі програми або ... ... Вікіпедія

Masterforex-V - (Мастерфорекс 5) Masterforex V це навчальний інтернет проект в області валютного ринку Форекс Викриття навчального проекту Masterforex V, організатор і викладачі шахрайської академії Мастерфорекс 5, методи обману клієнтів проекту ... ... Енциклопедія інвестора

Kamen Rider Double - Камен Райдер Дубль двадцятий сезон токусацу серіалу Наездник в масці. Витриманий в гумористичному дусі і має трохи детективну атмосферу. Головним мотивом сезону вважаються комп'ютерні флешки, які Райдери і монстри сезону використовують для ... ... Вікіпедія

Динамічний розподіл пам'яті - Динамічний розподіл пам'яті спосіб виділення оперативної пам'яті комп'ютера для об'єктів в програмі, при якому виділення пам'яті під об'єкт здійснюється під час виконання програми. При динамічному розподілі пам'яті об'єкти ... ... Вікіпедія

БІЛОРУСЬ - [Республіка Білорусь, Білорусія], держ під в Сх. Європі. Територія: 207,6 тис. Кв. км. Столиця: Мінськ. Географія. Межує на північному заході з Литвою, на півночі з Латвією, на північному сході і сході з Росією, на півдні з Україною, на заході з ... ... Православна енциклопедія

Схожі статті