Rozdíl mezi zásobníky a haldy

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 13 Smět 2024
Anonim
Rozdíl mezi zásobníky a haldy - Technologie
Rozdíl mezi zásobníky a haldy - Technologie

Obsah


Stack a Heap jsou segmenty paměti používané v technikách přidělování paměti. Primární rozdíl mezi stackem a haldy spočívá v tom, že stack zahrnuje lineární a sekvenční alokaci paměti, která se používá ve statické alokaci paměti, zatímco halda funguje jako oblast úložné oblasti, která náhodně přiděluje paměť (dynamické přidělení paměti).

Rychlost je hlavním parametrem, který rozlišuje hromadu a haldu; zásobník je výrazně rychlejší než hromada.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníZásobníkHalda
ZákladníPaměť je přidělena v (LIFO) Last in first out fashion.Paměť je přidělena v náhodném pořadí.
Přidělování a přidělováníAutomatickýManuál
NákladyMéněVíce
ImplementaceTvrdýSnadný, jednoduchý
VyvoláváníNA)O (1)
ProblémNedostatek pamětiFragmentace paměti
Referenční lokalitaVynikajícíAdekvátní
FlexibilitaPevná velikost a není flexibilníZměna velikosti je možná
Čas přístupuRychlejiPomaleji


Definice zásobníku

Přidělení zásobníku se řídí strategií LIFO (Last in first out) pro přiřazování paměti k procesům pomocí push a pop operací. Každý blok v paměti má pevnou velikost, kterou nelze rozšířit ani zkrátit. Poslední položka v zásobníku je přístupná kdykoli. Zásobník používá souvislou paměť, kde ukazatel pojmenovaný jako základní zásobník ukazuje na první položku zásobníku a další ukazatel pojmenovaný jako horní část zásobníku odkazuje na poslední položku zásobníku.

Stack také podporuje volání funkcí. Volání funkce může držet sbírku záznamů zásobníku, která se nazývá rámec zásobníku. Jiným názvem rámce zásobníku je aktivační záznam v con kompilátoru, protože ukládá data použitá v době kompilace programu. Kdykoli se funkce nazývá, rámeček zásobníku se zasune do zásobníku.


Rámec zásobníku se skládá buď z adres nebo hodnot parametru funkce a návratové adresy, což znamená, kde by měl být ovládací prvek vrácen po dokončení provádění funkce.

Definice haldy

Alokace haldy se neřídí žádným definitivním přístupem; spíše umožňuje náhodné přiřazení a přiřazení paměti. Žádost o přiřazení procesu vrátí s ukazatelem oblast přidělené paměti v haldě a proces přistupuje k oblasti přidělené paměti prostřednictvím ukazatele.

Deallocation se provádí prostřednictvím žádosti o deallocation, která se liší od zásobníku, kde je paměť automaticky přidělována. Halda vyvíjí díry v alokaci paměti, když jsou vytvořeny a uvolněny datové struktury. Používá se za běhu.

  1. Ve svazku je přidělování a přidělování prováděno procesorem a je automatické, zatímco v haldě je třeba provádět programátor ručně.
  2. Manipulace s haldy je nákladnější než manipulace s rámy zásobníku.
  3. Implementace zásobníku je složitá. Naproti tomu implementace haldy je jednoduchá.
  4. Volání funkce v zásobníku trvá O (N) čas. Naproti tomu v haldě trvá O (1) čas.
  5. Implementace zásobníku trpí hlavně nedostatkem paměti. Naopak hlavním problémem v haldě je fragmentace.
  6. Přístup k rámci zásobníku je jednodušší než halda, protože je zásobník omezen na malou oblast paměti a vždy zasáhne mezipaměť, ale haldy jsou rozptýleny v paměti, takže přístup k paměti může způsobit více chyb v mezipaměti.
  7. Zásobník není flexibilní, přidělenou velikost paměti nelze změnit. Na druhou stranu je halda flexibilní a přidělenou paměť lze změnit.
  8. Hromada zabere více času přístupu než zásobník.

Závěr

Přidělení zásobníku je rychlejší, ale složité. Na druhou stranu je halda pomalejší, ale její implementace je jednodušší než zásobník. Halda je efektivnější než zásobník.