Co to jest sterta pamięci?
Przypuszczalnie masz na myśli stertę z punktu widzenia alokacji pamięci, a nie z punktu widzenia struktury danych (termin ma wiele znaczeń).
Bardzo prostym wyjaśnieniem jest to, że sterta to część pamięci, w której znajduje się pamięć przydzielana dynamicznie (tj. Pamięć przydzielana przez malloc
). Pamięć przydzielona ze sterty pozostanie przydzielona do momentu wystąpienia jednej z następujących sytuacji:
free
dJeśli wszystkie odwołania do przydzielonej pamięci zostaną utracone (np. Nie przechowujesz już do niej wskaźnika), masz tak zwany wyciek pamięci . To jest miejsce, w którym pamięć jest nadal przydzielona, ale nie masz już łatwego dostępu do niej. Wyciek pamięci nie może zostać odzyskany do przyszłych alokacji pamięci, ale gdy program zakończy działanie, pamięć zostanie zwolniona przez system operacyjny.
Porównaj to z pamięcią stosu, w której żyją zmienne lokalne (zdefiniowane w ramach metody). Pamięć przydzielona na stosie przeważnie żyje tylko do momentu powrotu funkcji (są pewne wyjątki, np. Statyczne zmienne lokalne).
Więcej informacji o stercie można znaleźć w tym artykule .
Sterta pamięci to lokalizacja w pamięci, w której pamięć może być przydzielana w trybie swobodnego dostępu.
W przeciwieństwie do stosu, w którym pamięć jest przydzielana i zwalniana w ściśle określonej kolejności, poszczególne elementy danych alokowane na stercie są zwykle zwalniane w sposób asynchroniczny względem siebie. Każdy taki element danych jest zwalniany, gdy program jawnie zwalnia odpowiedni wskaźnik, co może spowodować pofragmentowanie sterty. W przeciwieństwie do tego, tylko dane na górze (lub na dole, w zależności od sposobu działania stosu) mogą zostać zwolnione, co spowoduje uwolnienie elementu danych w kolejności odwrotnej do przydzielenia.
źródło
Sterta to po prostu obszar, w którym pamięć jest przydzielana lub zwalniana bez żadnego zamówienia. Dzieje się tak, gdy tworzy się obiekt za pomocą
new
operatora lub czegoś podobnego. W przeciwieństwie do stosu, w którym pamięć jest zwalniana na podstawie pierwszego w, ostatniego.źródło
Sterta pamięci to wspólna struktura do przechowywania dynamicznie przydzielanej pamięci. Zobacz Dynamic_memory_allocation na Wikipedii.
Istnieją inne struktury, takie jak baseny, stosy i stosy.
źródło
Jest to porcja pamięci przydzielona z systemu operacyjnego przez menedżera pamięci używanego przez proces. Wywołania do
malloc()
et alia następnie pobierają pamięć z tego stosu, zamiast zajmować się bezpośrednio systemem operacyjnym.źródło
Prawdopodobnie masz na myśli pamięć sterty, a nie stertę pamięci.
Pamięć sterty to w zasadzie duża pula pamięci (zazwyczaj na proces), z której uruchomiony program może żądać porcji. Nazywa się to zwykle alokacją dynamiczną .
Różni się od stosu, w którym przydzielane są „zmienne automatyczne”. Na przykład, kiedy definiujesz w funkcji C zmienną wskaźnikową, na stosie przydzielana jest wystarczająca ilość miejsca do przechowywania adresu pamięci. Jednak często będziesz musiał dynamicznie przydzielić miejsce (za pomocą malloc) na stercie, a następnie podać adres, od którego zaczyna się ta porcja pamięci, do wskaźnika.
źródło