Čo je to zásobník?
Zásobník je špeciálna oblasť pamäte počítača, ktorá uchováva dočasné premenné vytvorené funkciou. V zásobníku sú premenné deklarované, ukladané a inicializované počas behu programu.
Je to dočasná pamäť. Po dokončení výpočtovej úlohy sa pamäť premennej automaticky vymaže. Sekcia zásobníka väčšinou obsahuje metódy, lokálne premenné a referenčné premenné.
V tomto návode sa dozviete,
- Čo je to Stack?
- Čo je halda?
- Kľúčové rozdiely medzi hromadou a hromadou
- Výhody použitia Stack
- Výhody použitia haldy
- Nevýhody používania Stack
- Nevýhody používania haldy
- Kedy použiť haldu alebo zásobník?
Čo je halda?
Halda je pamäť používaná programovacími jazykmi na ukladanie globálnych premenných. Štandardne sú všetky globálne premenné uložené v halde pamäťového priestoru. Podporuje dynamické prideľovanie pamäte.
Halda nie je pre vás spravovaná automaticky a nie je tak pevne spravovaná procesorom CPU. Je to skôr akoby voľne plávajúca oblasť pamäte.
KĽÚČOVÝ ROZDIEL
- Zásobník je lineárna dátová štruktúra, zatiaľ čo halda je hierarchická dátová štruktúra.
- Zásobníková pamäť sa nikdy nestane fragmentovanou, zatiaľ čo halda sa môže fragmentovať, pretože bloky pamäte sa najskôr pridelia a potom uvoľnia.
- Zásobník pristupuje k miestnym premenným iba vtedy, keď halda umožňuje prístup k premenným globálne.
- Veľkosť premenných zásobníka nie je možné zmeniť, zatiaľ čo veľkosť haldy je možné zmeniť.
- Zásobníková pamäť je alokovaná v súvislom bloku, zatiaľ čo pamäť haldy je alokovaná v ľubovoľnom náhodnom poradí.
- Stack nevyžaduje de-alokovať premenné, zatiaľ čo v halde je potrebné alokovať.
- Alokácia zásobníka a deallokácia sa vykonávajú podľa pokynov kompilátora, zatiaľ čo alokácia haldy a deallokácia sa vykonáva programátorom.
Kľúčové rozdiely medzi hromadou a hromadou
Parameter | Stoh | Halda |
---|---|---|
Typ dátových štruktúr | Zásobník je lineárna dátová štruktúra. | Halda je hierarchická dátová štruktúra. |
Prístupová rýchlosť | Vysokorýchlostný prístup | Pomalšie v porovnaní so stohom |
Správa priestoru | Priestor efektívne riadený operačným systémom, takže pamäť sa nikdy nerozdelí. | Halda priestoru sa nevyužíva tak efektívne. Pamäť sa môže fragmentovať, pretože bloky pamäte sa najskôr pridelia a potom uvoľnia. |
Prístup | Iba lokálne premenné | Umožňuje vám globálny prístup k premenným. |
Limit veľkosti priestoru | Limit na veľkosť zásobníka závisí od operačného systému. | Nemá konkrétne obmedzenie veľkosti pamäte. |
Zmeniť veľkosť | Veľkosť premenných nie je možné zmeniť | Premenných je možné meniť veľkosť. |
Pridelenie pamäte | Pamäť je pridelená v súvislom bloku. | Pamäť je alokovaná v ľubovoľnom náhodnom poradí. |
Prideľovanie a prideľovanie | Automaticky vykonané podľa pokynov kompilátora. | Robí to manuálne programátor. |
Dealokácia | Nevyžaduje sa alokácia premenných. | Je potrebné výslovné zrušenie pridelenia. |
Náklady | Menej | Viac |
Implementácia | Zásobník je možné implementovať 3 spôsobmi: založeným na jednoduchom poli, pomocou dynamickej pamäte a na prepojenom zozname. | Hromadu je možné implementovať pomocou polí a stromov. |
Hlavný problém | Nedostatok pamäte | Fragmentácia pamäte |
Miesto referencie | Automatické pokyny na zostavenie času. | Adekvátne |
Flexibilita | Pevná veľkosť | Zmena veľkosti je možná |
Prístupový čas | Rýchlejšie | Pomalšie |
Výhody použitia Stack
Tu sú výhody a výhody používania zásobníka:
- Pomáha vám spravovať údaje metódou Last In First Out (LIFO), ktorá nie je možná v prípade prepojeného zoznamu a poľa.
- Keď sa funkcia volá, miestne premenné sa uložia do zásobníka a po návrate sa automaticky zničia.
- Zásobník sa používa, keď sa premenná nepoužíva mimo túto funkciu.
- Umožňuje vám ovládať, ako je alokovaná a pridelená pamäť.
- Stack automaticky vyčistí objekt.
- Nie je ľahko poškoditeľný
- Veľkosť premenných nie je možné zmeniť.
Výhody použitia haldy
Výhody / výhody použitia haldy pamäte sú:
- Halda vám pomôže nájsť najväčší a minimálny počet
- Zber odpadu beží na halde pamäte, aby sa uvoľnila pamäť použitá objektom.
- Halda metóda použitá aj v prioritnom fronte.
- Umožňuje vám globálny prístup k premenným.
- Halda nemá žiadne obmedzenie veľkosti pamäte.
Nevýhody používania Stack
Nevýhody / Nevýhody používania pamäte Stack sú:
- Pamäť zásobníka je veľmi obmedzená.
- Vytvorenie príliš veľa objektov v zásobníku môže zvýšiť riziko pretečenia zásobníka.
- Náhodný prístup nie je možný.
- Variabilné úložisko bude prepísané, čo niekedy vedie k nedefinovanému chovaniu funkcie alebo programu.
- Stoh vypadne mimo oblasť pamäte, čo by mohlo viesť k abnormálnemu ukončeniu.
Nevýhody používania haldy
Nevýhody / nevýhody používania pamäte Heaps sú:
- Môže poskytnúť maximálnu pamäť, ktorú môže poskytnúť operačný systém
- Výpočet trvá viac času.
- Správa pamäte je v halde zložitejšia, pretože sa používa globálne.
- V porovnaní so zásobníkom trvá vykonanie príliš veľa času.
Kedy použiť haldu alebo zásobník?
Haldu by ste mali použiť, keď potrebujete prideliť veľký blok pamäte. Napríklad chcete vytvoriť veľké pole alebo veľkú štruktúru, aby ste túto premennú udržali dlho, potom by ste ju mali alokovať na halde.
Ak však pracujete s relatívne malými premennými, ktoré sú potrebné iba do doby, kým nebude funkcia, ktorá ich používa, aktívna. Potom musíte použiť zásobník, ktorý je rýchlejší a ľahší.