Różnica między stosem a stosem

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 13 Móc 2024
Anonim
Różnica między stosem a stosem - Technologia
Różnica między stosem a stosem - Technologia

Zawartość


Stack i Heap to segmenty pamięci używane w technikach alokacji pamięci. Podstawowa różnica między stosem a stertą polega na tym, że stos obejmuje liniowy i sekwencyjny przydział pamięci, który jest wykorzystywany w statycznym przydziale pamięci, podczas gdy sterty działają jak pula obszaru pamięci, który losowo przydzielał pamięć (dynamiczny przydział pamięci).

Szybkość jest głównym parametrem, który odróżnia stos i stos; stos jest znacznie szybszy niż stos.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniaStosSterta
PodstawowyPamięć jest przydzielana w trybie (LIFO) Last in first out.Pamięć jest przydzielana w kolejności losowej.
Alokacja i dezalokacjaAutomatycznypodręcznik
KosztMniejWięcej
RealizacjaCiężkoŁatwy
PrzywoływanieNA)O (1)
KwestiaNiedobór pamięciFragmentacja pamięci
Lokalizacja odniesieniaDoskonałyOdpowiedni
ElastycznośćUstalony rozmiar i nie jest elastycznyZmiana rozmiaru jest możliwa
Czas dostępuSzybciejWolniej


Definicja stosu

Alokacja stosu jest zgodna ze strategią LIFO (Last in first out) dotyczącą przypisywania pamięci do procesów za pomocą operacji push i pop. Każdy blok w pamięci ma stały rozmiar, którego nie można rozszerzyć ani skurczyć. Ostatni wpis na stosie jest dostępny w dowolnym momencie. Stos używa ciągłej pamięci, w której wskaźnik o nazwie podstawa stosu wskazuje na pierwszą pozycję stosu, a inny wskaźnik o nazwie góra stosu wskazuje na ostatnią pozycję stosu.

Stos obsługuje również wywołania funkcji. Wywołanie funkcji może zawierać kolekcję wpisów stosu, nazywane jest ramką stosu. Inną nazwą ramki stosu jest rekord aktywacyjny w szyku kompilatora, ponieważ przechowuje on dane wykorzystane podczas kompilacji programu. Za każdym razem, gdy wywoływana jest funkcja, ramka stosu jest wpychana do stosu.

Ramka stosu składa się z adresów lub wartości parametru funkcji i adresu zwrotnego, co oznacza, gdzie kontrola powinna zostać zwrócona po zakończeniu wykonywania funkcji.


Definicja sterty

Przydział sterty nie odbywa się według określonego podejścia; pozwala raczej na losowe przypisanie i cofnięcie przypisania pamięci. Żądanie przypisania przez proces zwraca za pomocą wskaźnika do przydzielonego obszaru pamięci w stercie, a proces uzyskuje dostęp do przydzielonego obszaru pamięci przez wskaźnik.

Zwolnienie jest przenoszone przez żądanie zwolnienia, niepodobne do stosu, w którym pamięć jest zwalniana automatycznie. Sterta tworzy dziury w alokacji pamięci, gdy struktury danych są budowane i uwalniane. Jest używany w czasie wykonywania.

  1. W stosie alokacja i dezalokacja są wykonywane przez procesor i są automatyczne, natomiast w stercie programista musi to zrobić ręcznie.
  2. Obsługa ramki stosu jest droższa niż obsługa ramki stosu.
  3. Implementacja stosu jest złożona. W przeciwieństwie do implementacji stosu jest prosta.
  4. Wywołanie funkcji na stosie zajmuje czas O (N). W przeciwieństwie do tego, kupa zajmuje czas O (1).
  5. Implementacja stosu cierpi głównie na problem braku pamięci. Przeciwnie, głównym problemem na stercie jest fragmentacja.
  6. Dostęp do ramki stosu jest łatwiejszy niż stos, ponieważ stos jest ograniczony do małego obszaru pamięci i zawsze trafia do pamięci podręcznej, ale ramki stosu są rozproszone w pamięci, więc dostęp do pamięci może powodować więcej braków pamięci podręcznej.
  7. Stos nie jest elastyczny, przydzielonego rozmiaru pamięci nie można zmienić. Z drugiej strony sterta jest elastyczna, a przydzieloną pamięć można zmienić.
  8. Dostęp do stosu zajmuje więcej czasu niż stos.

Wniosek

Alokacja stosu jest szybsza, ale złożona. Z drugiej strony sterta jest wolniejsza, ale jej implementacja jest prostsza niż stos. Sterta jest bardziej wydajna niż stos.