- Podrobnosti
- Poslední aktualizace: 28. května 2021
Co je to Stack?
Zásobník je speciální oblast paměti počítače, do které se ukládají 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.
Jedná se o dočasnou paměť. Po dokončení výpočetní úlohy bude paměť proměnné automaticky vymazána. Sekce zásobníku většinou obsahuje metody, lokální proměnné a referenční proměnné.
V tomto tutoriálu se naučíte,
- Co je Stack?
- Co je Heap?
- Klíčové rozdíly mezi hromádkou a hromádkou
- Výhody použití Stack
- Výhody použití haldy
- Nevýhody používání Stack
- Nevýhody používání haldy
- Kdy použít haldu nebo hromádku?
Co je Heap?
Halda je paměť, kterou programovací jazyky používají 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 pro vás není spravována automaticky a není tak pevně spravována procesorem. Je to spíše 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 může být fragmentována, protože bloky paměti jsou nejprve přiděleny a poté uvolněny.
- Stack přistupuje k lokálním proměnným pouze tehdy, když vám Heap umožňuje přístup k proměnným globálně.
- Velikost proměnných zásobníku nelze změnit, zatímco proměnným hromádky lze změnit velikost.
- 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 nutné delokaci.
- Přidělení a zrušení přidělení zásobníku se provádí podle pokynů kompilátoru, zatímco přidělení a zrušení přidělení hromady provádí programátor.
Klíčové rozdíly mezi hromádkou a hromádkou
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 | Prostor efektivně spravovaný operačním systémem, takže paměť nebude nikdy fragmentována. | Heap Space není využíván tak efektivně. Paměť může být fragmentována, protože bloky paměti jsou nejprve přiděleny a poté uvolněny. |
Přístup | Pouze lokální proměnné | Umožňuje vám přístup k proměnným globálně. |
Limit 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 | Velikost proměnných lze změnit. |
Přidělení paměti | Paměť je alokována v souvislém bloku. | Paměť je přidělena v libovolném náhodném pořadí. |
Přidělení a zrušení přidělení | Automaticky provedeno podle pokynů kompilátoru. | Ručně to provádí programátor. |
Dealokace | Nevyžaduje delokaci proměnných. | Je zapotřebí explicitní delokace. |
Náklady | Méně | Více |
Implementace | Stoh lze implementovat třemi způsoby, založenými na jednoduchém poli, pomocí dynamické paměti a na základě propojeného seznamu. | Haldu lze implementovat pomocí pole a stromů. |
Hlavní problém | Nedostatek paměti | Fragmentace paměti |
Referenční lokalita | Automatické časové kompilace. | Přiměřené |
Flexibilita | Pevná velikost | Změna velikosti je možná |
Čas přístupu | Rychleji | Pomaleji |
Výhody použití 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é jsou uloženy v zásobníku a po vrácení se automaticky zničí.
- Zásobník se používá, pokud se proměnná nepoužívá mimo tuto funkci.
- Umožňuje vám řídit přidělování a uvolňování paměti.
- Stack objekt automaticky vyčistí.
- Nelze snadno poškodit
- Velikost proměnných nelze změnit.
Výhody použití haldy
Výhody/výhody používání haldy paměti jsou:
- Halda vám pomůže najít největší a minimální počet
- Uvolňování paměti používané objektem probíhá v paměti haldy.
- Metoda haldy se také používá ve frontě priorit.
- Umožňuje vám přístup k proměnným globálně.
- Halda nemá žádné omezení velikosti paměti.
Nevýhody používání Stack
Nevýhody/nevýhody používání paměti zásobníku jsou:
- Paměť zásobníku je velmi omezená.
- Vytvář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é úložiště bude přepsáno, což někdy vede k nedefinovanému chování funkce nebo programu.
- Zásobník spadne mimo oblast paměti, což může vést k abnormálnímu ukončení.
Nevýhody používání haldy
Nevýhody/nevýhody používání hromádkové paměti jsou:
- Může poskytnout maximální paměť, kterou může poskytnout OS
- Výpočet zabere více času.
- Správa paměti je v haldě paměti komplikovanější, protože se používá globálně.
- Ve srovnání se zásobníkem to vyžaduje příliš mnoho času na provedení.
Kdy použít haldu nebo hromádku?
Pokud potřebujete přidělit velký blok paměti, měli byste použít haldu. Například chcete vytvořit pole velké velikosti nebo velkou strukturu, která tuto proměnnou udrží po 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í. Poté musíte použít zásobník, který je rychlejší a jednodušší.