Dlaczego sterta środowiska wykonawczego jest używana do dynamicznej alokacji pamięci w językach typu C i struktura danych są nazywane „stertą”? Czy jest jakiś związek?
Dlaczego sterta środowiska wykonawczego jest używana do dynamicznej alokacji pamięci w językach typu C i struktura danych są nazywane „stertą”? Czy jest jakiś związek?
Odpowiedzi:
Donald Knuth mówi (The Art of Computer Programming, Third Ed., Vol. 1, str. 435):
Około 1975 r. Kilku autorów zaczęło nazywać pulę dostępnej pamięci „stertą”.
Nie mówi, którzy autorzy i nie podaje odniesień do żadnych konkretnych artykułów, ale mówi, że użycie terminu „sterta” w odniesieniu do kolejek priorytetowych jest tradycyjnym znaczeniem tego słowa.
Mają tę samą nazwę, ale tak naprawdę nie są podobne (nawet koncepcyjnie). Sterta pamięci nazywana jest stertą w taki sam sposób, jak kosz na bieliznę nazywamy „stertą ubrań”. Ta nazwa jest używana do wskazania nieco niechlujnego miejsca, w którym można dowolnie alokować i zwalniać pamięć. Struktura danych (jak wskazuje odsyłacz do Wikipedii) jest zupełnie inna.
Kolizja nazw jest niefortunna, ale nie aż tak tajemnicza. Sterta to małe, powszechne słowo używane na oznaczenie stosu, kolekcji, grupy itp. Użycie tego słowa na określenie struktury danych poprzedza (jestem prawie pewien) nazwę puli pamięci. W rzeczywistości basen byłby moim zdaniem znacznie lepszym wyborem dla tego drugiego. Sterta oznacza strukturę pionową (jak stos), która pasuje do struktury danych, ale nie do puli pamięci. Nie myślimy o stercie puli pamięci jako hierarchicznej, podczas gdy podstawową ideą stojącą za strukturą danych jest utrzymywanie największego elementu na szczycie stosu (i pod-stosów).
Heap struktura danych sięga połowy lat 60-tych; sterty puli pamięci, wczesne lata 70. Termin sterta (oznaczający pula pamięci) był używany co najmniej już w 1971 roku przez Wijngaardena w dyskusjach na temat Algola.
Prawdopodobnie najwcześniejsze użycie sterty jako struktury danych zostało znalezione siedem lat wcześniej w
Williams, JWJ 1964. „Algorithm 232 - Heapsort”, Communications of the ACM 7 (6): 347-348
Właściwie czytanie o sposobie alokacji pamięci (patrz Buddy Blocks ) przypomina mi stertę struktur danych.
IMO to tylko przypadek / zbieg okoliczności, że te dwie zupełnie niezwiązane ze sobą rzeczy mają tę samą nazwę. To jak wykres i wykres .
Struktura danych przypominająca stertę jest używana przez algorytm znajdowania dostępnej alokacji pamięci. Poniższy fragment pochodzi z http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
Kiedy
new
jest wywoływany, zaczyna szukać wolnego bloku pamięci, który pasuje do rozmiaru twojego żądania. Zakładając, że taki blok pamięci zostanie znaleziony, jest oznaczany jako zarezerwowany i zwracany jest wskaźnik do tej lokalizacji. Jest kilka algorytmów, aby to osiągnąć, ponieważ trzeba znaleźć kompromis między skanowaniem całej pamięci w celu znalezienia najmniejszego wolnego bloku większego niż rozmiar twojego obiektu lub zwróceniem pierwszego, w którym zmieści się potrzebna pamięć. Aby przyspieszyć otrzymywanie bloku pamięci, wolne i zarezerwowane obszary pamięci są utrzymywane w strukturze danych podobnej do drzew binarnych zwanych stertą.
Potoczne terminy pamięć stosu i pamięć sterty nie są używane w standardzie C ++. Standard wykorzystuje magazyn statyczny, magazyn wątków, magazyn automatyczny i magazyn dynamiczny.
Więcej można znaleźć w sekcji normy dotyczącej trwałości przechowywania .
Dlatego z punktu widzenia języka i standardowej biblioteki nie ma zamieszania.
P. Co to jest sterta? A. Sterta to zbiór obiektów umieszczonych jeden na drugim.
Odpowiedź na twoje pytanie: Zarówno sterta pamięci, jak i sterta binarna używają tego samego pojęcia, co wiesz. Dane są przechowywane w formie sterty w pamięci w tej samej kolejności, w jakiej są zapisywane w programie, natomiast sterta binarna to struktura danych, która opiera się na tej samej koncepcji przechowywania danych w uporządkowany sposób w postaci sterty (Data on top z drugiej). Daj mi znać, co myślisz w sekcji komentarzy.
Być może pierwsza zaimplementowana sterta pamięci była zarządzana przez strukturę sterty?