Було запропоновано цю статтю або розділ з Керування пам'яттю, але, можливо, це варто додатково . Пропозиція з жовтня 2015. |
}
Купа (англ. heap) — в інформатиці та програмуванні область зарезервованого адресного простору, умовна назва структури даних, поверх якої реалізована динамічна пам'ять програми.
Купа використовує пам'ять, виділену статично або запитану динамічно у операційної системи. Ця пам'ять використовується для розміщення об'єктів, динамічно створених програмою.
У будь-який момент часу існування купи вся пам'ять, на якій працює купа, розділена на зайняту і вільну. Зайнята пам'ять використана під розміщення об'єктів, вже створених і ще не звільнених до цього моменту часу. З обсягу вільної пам'яті примітиви роботи з купою можуть виділяти пам'ять під нові об'єкти. Для зберігання даних про приналежність пам'яті до зайнятої або вільною зазвичай використовується додаткова область пам'яті.
Для розміщення і видалення динамічних об'єктів використовуються примітиви «створити об'єкт» (наприклад, malloc) і «видалити об'єкт» (наприклад, free). Крім того, перед початком роботи програми виконується ініціалізація купи, в ході якої вся спочатку виділена під купу пам'ять відзначається як вільна.
При розміщенні об'єкта реалізація примітиву «створити об'єкт» переглядає доступну купі вільну пам'ять у пошуках можливості розмістити в ній об'єкт необхідного розміру. Багато реалізації примітивів купи можуть у разі браку власної вільної пам'яті запитати додаткову пам'ять у операційної системи. У випадку, якщо з тих чи інших причин розмістити об'єкт неможливо, примітив «створити об'єкт» повідомляє про помилку (наприклад, malloc повертає 0). Обрана область пам'яті відзначається як зайнята. Примітив повертає адресу початку виділеної області. Під час видалення об'єкта реалізація примітиву «видалити об'єкт» зазначає, що область, раніше використана видаляється об'єктом, тепер вільна.
У проміжках між викликами примітивів «створити об'єкт» і «видалити об'єкт» виділена під об'єкт область пам'яті не може бути віддана ні під який інший об'єкт. Тому програма може вільно користуватися виділеної йому областю пам'яті. У той же час, після виклику примітиву «видалити об'єкт» звільнена область може бути використана повторно або віддана операційній системі, тому використання покажчика, отриманого раніше від примітиву «створити об'єкт» буде призводити до збоїв або непередбачуваною роботі програми.
Виклики функцій бібліотек зазвичай відбуваються швидше і вимагають менше ресурсів на виконання, ніж виклики операційних систем.
Купа є довгий відрізок адрес пам'яті, поділений на підряд йдуть блоки різних розмірів. Блоки бувають вільні і зайняті. Для можливості виділення пам'яті шляхом повторного використання вільного блоку (без дорогого збільшення купи в цілому — вимагає системного виклику) у тому чи іншому вигляді потрібен список вільних блоків.
Для скорочення списку вільних блоків з метою зменшення часу його обходу завжди має сенс зливати 2 або 3 поспіль вільних блоку в один. Якщо вільний наступний блок, то його легко знайти, відступивши вперед на розмір який вивільняється блоку. З попереднім блоком все складніше, і тому має сенс зберігати розмір попереднього блоку (для його пошуку) в заголовку будь-якого блоку.
Список вільних блоків може бути організований по-різному, і від його організації прямо залежить продуктивність купи. Справа в тому, що головний час у операції виділення витрачається саме на пошук в цьому списку.
Дуже гарною реалізацією є кілька списків, кожен для свого розміру. Це дозволяє швидко проігнорувати явно занадто маленькі вільні блоки цілими списками, без перевірки кожного персонально.
Посилання
Ця стаття не містить . (жовтень 2015) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Bulo zaproponovano ob yednati cyu stattyu abo rozdil z Keruvannya pam yattyu ale mozhlivo ce varto dodatkovo obgovoriti Propoziciya z zhovtnya 2015 Kupa angl heap v informatici ta programuvanni oblast zarezervovanogo adresnogo prostoru umovna nazva strukturi danih poverh yakoyi realizovana dinamichna pam yat programi Kupa vikoristovuye pam yat vidilenu statichno abo zapitanu dinamichno u operacijnoyi sistemi Cya pam yat vikoristovuyetsya dlya rozmishennya ob yektiv dinamichno stvorenih programoyu U bud yakij moment chasu isnuvannya kupi vsya pam yat na yakij pracyuye kupa rozdilena na zajnyatu i vilnu Zajnyata pam yat vikoristana pid rozmishennya ob yektiv vzhe stvorenih i she ne zvilnenih do cogo momentu chasu Z obsyagu vilnoyi pam yati primitivi roboti z kupoyu mozhut vidilyati pam yat pid novi ob yekti Dlya zberigannya danih pro prinalezhnist pam yati do zajnyatoyi abo vilnoyu zazvichaj vikoristovuyetsya dodatkova oblast pam yati Dlya rozmishennya i vidalennya dinamichnih ob yektiv vikoristovuyutsya primitivi stvoriti ob yekt napriklad malloc i vidaliti ob yekt napriklad free Krim togo pered pochatkom roboti programi vikonuyetsya inicializaciya kupi v hodi yakoyi vsya spochatku vidilena pid kupu pam yat vidznachayetsya yak vilna Pri rozmishenni ob yekta realizaciya primitivu stvoriti ob yekt pereglyadaye dostupnu kupi vilnu pam yat u poshukah mozhlivosti rozmistiti v nij ob yekt neobhidnogo rozmiru Bagato realizaciyi primitiviv kupi mozhut u razi braku vlasnoyi vilnoyi pam yati zapitati dodatkovu pam yat u operacijnoyi sistemi U vipadku yaksho z tih chi inshih prichin rozmistiti ob yekt nemozhlivo primitiv stvoriti ob yekt povidomlyaye pro pomilku napriklad malloc povertaye 0 Obrana oblast pam yati vidznachayetsya yak zajnyata Primitiv povertaye adresu pochatku vidilenoyi oblasti Pid chas vidalennya ob yekta realizaciya primitivu vidaliti ob yekt zaznachaye sho oblast ranishe vikoristana vidalyayetsya ob yektom teper vilna U promizhkah mizh viklikami primitiviv stvoriti ob yekt i vidaliti ob yekt vidilena pid ob yekt oblast pam yati ne mozhe buti viddana ni pid yakij inshij ob yekt Tomu programa mozhe vilno koristuvatisya vidilenoyi jomu oblastyu pam yati U toj zhe chas pislya vikliku primitivu vidaliti ob yekt zvilnena oblast mozhe buti vikoristana povtorno abo viddana operacijnij sistemi tomu vikoristannya pokazhchika otrimanogo ranishe vid primitivu stvoriti ob yekt bude prizvoditi do zboyiv abo neperedbachuvanoyu roboti programi Vikliki funkcij bibliotek zazvichaj vidbuvayutsya shvidshe i vimagayut menshe resursiv na vikonannya nizh vikliki operacijnih sistem Kupa ye dovgij vidrizok adres pam yati podilenij na pidryad jdut bloki riznih rozmiriv Bloki buvayut vilni i zajnyati Dlya mozhlivosti vidilennya pam yati shlyahom povtornogo vikoristannya vilnogo bloku bez dorogogo zbilshennya kupi v cilomu vimagaye sistemnogo vikliku u tomu chi inshomu viglyadi potriben spisok vilnih blokiv Dlya skorochennya spisku vilnih blokiv z metoyu zmenshennya chasu jogo obhodu zavzhdi maye sens zlivati 2 abo 3 pospil vilnih bloku v odin Yaksho vilnij nastupnij blok to jogo legko znajti vidstupivshi vpered na rozmir yakij vivilnyayetsya bloku Z poperednim blokom vse skladnishe i tomu maye sens zberigati rozmir poperednogo bloku dlya jogo poshuku v zagolovku bud yakogo bloku Spisok vilnih blokiv mozhe buti organizovanij po riznomu i vid jogo organizaciyi pryamo zalezhit produktivnist kupi Sprava v tomu sho golovnij chas u operaciyi vidilennya vitrachayetsya same na poshuk v comu spisku Duzhe garnoyu realizaciyeyu ye kilka spiskiv kozhen dlya svogo rozmiru Ce dozvolyaye shvidko proignoruvati yavno zanadto malenki vilni bloki cilimi spiskami bez perevirki kozhnogo personalno PosilannyaCya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno zhovten 2015