Stack vs Heap: Znát rozdíl

Obsah:

Anonim

Co je to zásobník?

Zásobník je speciální oblast paměti počítače, která ukládá dočasné proměnné vytvořené funkcí. V zásobníku jsou proměnné deklarovány, ukládány a inicializovány během běhu.

Je to dočasná paměť. Po dokončení výpočtu bude paměť proměnné automaticky vymazána. Sekce zásobníku většinou obsahuje metody, místní proměnné a referenční proměnné.

V tomto výukovém programu se naučíte,

  • Co je to Stack?
  • Co je halda?
  • Klíčové rozdíly mezi zásobníkem a hromadou
  • Výhody používání Stack
  • Výhody použití haldy
  • Nevýhody používání Stack
  • Nevýhody použití haldy
  • Kdy použít haldu nebo zásobník?

Co je halda?

Halda je paměť používaná programovacími jazyky k ukládání globálních proměnných. Ve výchozím nastavení jsou všechny globální proměnné uloženy v paměti haldy. Podporuje dynamické přidělování paměti.

Halda není pro vás spravována automaticky a není tak pevně spravována CPU. Je to spíš jako volně plovoucí oblast paměti.

KLÍČOVÝ ROZDÍL

  • Stack je lineární datová struktura, zatímco Heap je hierarchická datová struktura.
  • Paměť zásobníku se nikdy nestane fragmentovanou, zatímco paměť haldy se může fragmentovat, protože bloky paměti jsou nejprve přiděleny a poté uvolněny.
  • Zásobník přistupuje k místním proměnným pouze, zatímco halda umožňuje přístup k proměnným globálně.
  • Velikost proměnných zásobníku nelze změnit, zatímco proměnné haldy lze změnit.
  • Paměť zásobníku je přidělena v souvislém bloku, zatímco paměť haldy je přidělena v libovolném náhodném pořadí.
  • Stack nevyžaduje delokaci proměnných, zatímco v haldě je delokace nutná.
  • Přidělení zásobníku a uvolnění se provádí podle pokynů kompilátoru, zatímco přidělení hromady a uvolnění se provádí programátorem.

Klíčové rozdíly mezi zásobníkem a hromadou

Parametr Zásobník Halda
Typ datových struktur Zásobník je lineární datová struktura. Halda je hierarchická datová struktura.
Rychlost přístupu Vysokorychlostní přístup Pomalejší ve srovnání se zásobníkem
Správa prostoru Efektivně spravovaný prostor operačním systémem, takže paměť nebude nikdy fragmentována. Halda není využívána tak efektivně. Paměť se může fragmentovat, protože bloky paměti se nejprve přidělí a poté uvolní.
Přístup Pouze místní proměnné Umožňuje vám globální přístup k proměnným.
Omezení velikosti prostoru Omezení velikosti zásobníku v závislosti na operačním systému. Nemá konkrétní omezení velikosti paměti.
Změnit velikost Velikost proměnných nelze změnit Proměnné lze měnit.
Přidělení paměti Paměť je přidělena v souvislém bloku. Paměť je alokována v libovolném náhodném pořadí.
Přidělování a přidělování Automaticky provedeno podle pokynů kompilátoru. Programátor to provádí ručně.
Dealokace Nevyžaduje přerozdělení proměnných. Je potřeba výslovné zrušení přidělení.
Náklady Méně Více
Implementace Zásobník lze implementovat třemi způsoby založenými na jednoduchém poli, pomocí dynamické paměti a na propojeném seznamu. Haldu lze implementovat pomocí pole a stromů.
Hlavní problém Nedostatek paměti Fragmentace paměti
Místo reference Automatické pokyny pro kompilaci času. Adekvátní
Flexibilita Pevná velikost Změna velikosti je možná
Čas přístupu Rychlejší Pomaleji

Výhody používání Stack

Zde jsou výhody / výhody používání zásobníku:

  • Pomáhá vám spravovat data metodou Last In First Out (LIFO), což u propojeného seznamu a pole není možné.
  • Když se funkce nazývá, místní proměnné se ukládají do zásobníku a po návratu se automaticky zničí.
  • Zásobník se používá, když se proměnná nepoužívá mimo tuto funkci.
  • Umožňuje vám řídit, jak je alokována a uvolněna paměť.
  • Stack automaticky vyčistí objekt.
  • Nelze snadno poškodit
  • Velikost proměnných nelze změnit.

Výhody použití haldy

Výhody / výhody použití haldy paměti jsou:

  • Halda vám pomůže najít největší a minimální počet
  • Garbage collection běží na paměti haldy, aby uvolnila paměť používanou objektem.
  • Metoda haldy také použitá v prioritní frontě.
  • Umožňuje vám globální přístup k proměnným.
  • Halda nemá žádné omezení velikosti paměti.

Nevýhody používání Stack

Nevýhody / Nevýhody používání paměti Stack jsou:

  • Paměť zásobníku je velmi omezená.
  • Vytvoření příliš mnoha objektů v zásobníku může zvýšit riziko přetečení zásobníku.
  • Náhodný přístup není možný.
  • Proměnná paměť bude přepsána, což někdy vede k nedefinovanému chování funkce nebo programu.
  • Zásobník spadne mimo oblast paměti, což by mohlo vést k abnormálnímu ukončení.

Nevýhody použití haldy

Nevýhody / nevýhody používání paměti Heaps jsou:

  • Může poskytnout maximální paměť, kterou může operační systém poskytnout
  • Výpočet trvá déle.
  • Správa paměti je v haldě složitější, protože se používá globálně.
  • Ve srovnání se zásobníkem to trvá příliš dlouho.

Kdy použít haldu nebo zásobník?

Haldu byste měli použít, když potřebujete přidělit velký blok paměti. Například chcete vytvořit velké pole nebo velkou strukturu, abyste tuto proměnnou udrželi dlouhou dobu, pak byste ji měli přidělit na haldě.

Pokud však pracujete s relativně malými proměnnými, které jsou vyžadovány pouze do doby, než je funkce, která je používá, aktivní. Pak musíte použít zásobník, který je rychlejší a jednodušší.