Alokacja pamięci: Różnice pomiędzy wersjami

Dodane 445 bajtów ,  3 lata temu
źródła/przypisy
m (literówki)
(źródła/przypisy)
{{dopracować|źródła=2012-06}}
 
'''Alokacja pamięci''' oraz '''dealokacja pamięci''' – odpowiednio przydział i zwolnienie '''ciągłego''' obszaru [[pamięć komputerowa|pamięci]]. Po uruchomieniu, [[proces (informatyka)|proces]] (program) otrzymuje od [[system operacyjny|systemu operacyjnego]] jedno lub więcej pól dostępnej [[pamięć komputerowa|pamięci]], możliwej do dowolnego wykorzystania. W zależności od przyjętej konstrukcji i zastosowania obszar nazywany jest '''[[sterta (informatyka)|stertą]]''' (ang. ''heap'') lub [[stos (informatyka)|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ęzyk programowania|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 [[odśmiecanie pamięci|automatycznie]] przeprowadza procedurę dealokacji, bez udziału programisty.
 
Dla przykładu w języku [[c (język programowania)|C]], do ręcznej dynamicznej alokacji i dealokacji pamięci służą [[podprogram|funkcje]] [[Biblioteka standardowa języka C|biblioteki standardowej]]: <code>[[malloc]]</code> (alokacja) i <code>[[free (libc)|free]]</code> (dealokacja); w języku [[C++]] służą do tego specjalne słowa kluczowe ([[operator (programowanie)|operatory]]): <code>[[New (programowanie obiektowe)|new]]</code> oraz <code>[[delete]]</code>.<ref>{{Cytuj |tytuł = Alokacja pamięci |data dostępu = 2018-06-10 |opublikowany = msdn.microsoft.com |url = https://msdn.microsoft.com/pl-pl/library/hk1k7x6x.aspx |język = pl}}</ref>
 
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 [[wyciek pamięci|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, znacznego spowolnienia działania całego systemu lub też jego zawieszenia.
 
Alokacja pamięci nie powiedzie się, gdy nie istnieje wolny '''ciągły''' obszar pamięci o wymaganym rozmiarze (patrz [[Fragmentacja pamięci|fragmentacja zewnętrzna]]).<ref>{{Cytuj |tytuł = Alokacja pamięci |czasopismo = Encyklopedia Zarządzania |data dostępu = 2018-06-10 |url = https://mfiles.pl/pl/index.php/Alokacja_pami%C4%99ci |język = pl}}</ref>
 
== Zarządca pamięci ==
* '''najgorzej pasujący''' - wyszukiwany jest największy wolny obszar.
 
Istnieje specjalny rodzaj zarządców pamięci, tzw. pule pamięci (ang. ''memory pool''), które operują na obszarach pamięci o określonym z góry rozmiarze. W takich przypadkach problem [[Fragmentacja pamięci|fragmentacji zewnętrznej]] jest całkowicie eliminowany, gdy dodatkowo rozmiar ten ściśle odpowiada potrzebom aplikacji znika również problem fragmentacji wewnętrznej.<ref>https://eia.pg.edu.pl/documents/184087/284323/wskaznikidynalok.pdf</ref>
 
== Zobacz też ==
* [[fragmentacja pamięci]]
 
== Przypisy ==
{{przypisy}}
[[Kategoria:Konstrukcje programistyczne]]
[[Kategoria:Zarządzanie pamięcią]]