Alokacja pamięci
Z Wikipedii, wolnej encyclopedia
Alokacja pamięci oraz dealokacja pamięci – odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program) otrzymuje od systemu operacyjnego jedno lub więcej pól dostępnej pamięci, możliwej do dowolnego wykorzystania. W zależności od przyjętej konstrukcji i zastosowania obszar nazywany jest stertą (ang. heap) lub stosem. W trakcie działania program może zażądać od systemu operacyjnego większej ilości pamięci (alokacja) lub też zwolnić niepotrzebny obszar (dealokacja).
Wewnętrznie programy samodzielnie zarządzają przydzieloną im pamięcią - niskopoziomowe języki programowania dostarczają interfejs programistyczny do zarządzania stertą, który oferuje wyłącznie możliwość zarezerwowania pewnego obszaru (alokacja) i późniejszego jego zwalniania (dealokacja). Wiele wysokopoziomowych języków programowania automatycznie przeprowadza procedurę dealokacji, bez udziału programisty.
Dla przykładu w języku C, do ręcznej dynamicznej alokacji i dealokacji pamięci służą funkcje biblioteki standardowej: malloc
(alokacja) i free
(dealokacja); w języku C++ służą do tego specjalne słowa kluczowe (operatory): new
oraz delete
[1].
Najpopularniejsze obecnie systemy operacyjne automatycznie zwalniają pamięć przydzieloną procesom, gdy te zakończą działanie bez uprzedniej dealokacji otrzymanej pamięci. Na poziomie aplikacji pominięcie dealokacji doprowadza do wycieku pamięci, co w przypadku aplikacji działających przez długi czas (np. serwery, lub inne aplikacje wykonujące dużo dynamicznej alokacji i dealokacji pamięci), jest uważane za poważny błąd, jako iż z biegiem czasu proces taki będzie potrzebował coraz więcej pamięci, co może doprowadzić nawet do jego zawieszenia, unicestwienia lub znacznego spowolnienia działania całego systemu.
Alokacja pamięci nie powiedzie się, gdy nie istnieje wolny ciągły obszar pamięci o wymaganym rozmiarze (patrz fragmentacja zewnętrzna)[2].