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

Dodane 74 bajty ,  6 lat temu
(ort.)
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 ('''dezalokacja'''). Wiele wysokopoziomowych języków programowania [[odśmiecanie pamięci|automatycznie]] przeprowadza procedurę dezalokacji, bez udziału programisty.
 
Dla przykładu w języku [[c (język programowania)|C]], do ręcznej dynamicznej alokacji i dezalokacji pamięci służą [[podprogram|funkcje]] [[libcBiblioteka standardowa języka C|biblioteki standardowej]]: <code>[[malloc]]</code> (alokacja) i <code>[[free (libc)|free]]</code> (dezalokacja); 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>.
 
Systemy operacyjne automatycznie zwalniają pamięć przydzieloną procesom, gdy te zakończą działanie bez uprzedniej dezalokacji otrzymanej pamięci. Na poziomie aplikacji pominięcie dezalokacji doprowadza do [[wyciek pamięci|wycieku pamięci]], co w przypadku aplikacji działających długi czas (np. serwery, lub inne aplikacje wykonujące dużo dynamicznej alokacji i dezalokacji 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 zawieszenie, unicestwienia, znacznego spowolnienia działania całego systemu lub tez 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]]).
 
== Zarządca pamięci ==
 
Część systemu operacyjnego bądź aplikacji użytkowej odpowiedzialna za przydział i zwalnianie pamięci nazywa się zarządcą pamięci. Zarządca pamięci posiada listę obszarów wolnych i przydzielonych, charakteryzowanych adresem obszaru i jego rozmiarem. Często rozmiar jest wielokrotnością pewnej liczby bajtów, bądź też nie jest możliwe przydzielenie mniejszej liczby bajtów niż określona wartość graniczna - co w obu przypadkach prowadzi do [[fragmentacjaFragmentacja wewnętrznapamięci|fragmentacji wewnętrznej]].
 
Wyróżnia się trzy strategie przydziału 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 [[fragmentacjaFragmentacja zewnętrznapamięci|fragmentacji zewnętrznej]] jest całkowicie eliminowany, gdy dodatkowo rozmiar ten ściśle odpowiada potrzebom aplikacji znika również problem fragmentacji wewnętrznej.
 
== Zobacz też ==