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?
c++
heap
terminology
heap-memory
Andrey Fedorov
źródło
źródło
Odpowiedzi:
Donald Knuth mówi (The Art of Computer Programming, Third Ed., Vol. 1, str. 435):
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.
źródło
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.
źródło
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
źródło
Właściwie czytanie o sposobie alokacji pamięci (patrz Buddy Blocks ) przypomina mi stertę struktur danych.
źródło
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 .
źródło
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 .
źródło
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.
źródło
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.
źródło
Być może pierwsza zaimplementowana sterta pamięci była zarządzana przez strukturę sterty?
źródło