Rozdiel medzi zásobami a haldy
Obsah
Stack a Heap sú segmenty pamäte používané v technikách prideľovania pamäte. Primárny rozdiel medzi zásobníkmi a haldy spočíva v tom, že zásobníky zahŕňajú lineárne a postupné prideľovanie pamäte, ktorá sa používa v prideľovaní statickej pamäte, zatiaľ čo halda funguje ako oblasť úložnej oblasti, ktorá náhodne prideľuje pamäť (dynamické prideľovanie pamäte).
Rýchlosť je hlavným parametrom, ktorý rozlišuje hromadu a haldu; stoh je výrazne rýchlejší ako hromada.
- Porovnávacia tabuľka
- definícia
- Kľúčové rozdiely
- záver
Porovnávacia tabuľka
Základ pre porovnanie | Stoh | halda |
---|---|---|
základné | Pamäť je alokovaná v (LIFO) Last in first out fashion. | Pamäť je alokovaná v náhodnom poradí. |
Pridelenie a pridelenie | automatický | Manuálny |
náklady | menej | viac |
uskutočnenie | usilovne | jednoduchý |
vyvolanie | O (N) | O (1) |
Problém | Nedostatok pamäte | Fragmentácia pamäte |
Miesto referencie | vynikajúci | primeraný |
flexibilita | Pevná veľkosť a nie je flexibilná | Zmena veľkosti je možná |
Čas prístupu | rýchlejší | pomalší |
Definícia zásobníka
Priraďovanie zásobníkov sa riadi stratégiou LIFO (Last in first out) na prideľovanie pamäte procesom pomocou push a pop operácie. Každý blok v pamäti má pevnú veľkosť, ktorú nie je možné rozširovať alebo sťahovať. Posledný záznam v zásobníku je prístupný kedykoľvek. Zásobník používa súvislú pamäť, kde ukazovateľ pomenovaný ako základný stĺpec zásobníka odkazuje na prvý záznam zásobníka a ďalší ukazovateľ pomenovaný ako horný koniec zásobníka odkazuje na posledný záznam zásobníka.
Zásobník tiež podporuje volania funkcií. Volanie funkcie môže držať kolekciu zásobníkov, ktorá sa nazýva rám zásobníkov. Iným názvom rámca zásobníka je aktivačný záznam v con kompilátore, ktorý ukladá dáta použité v čase kompilácie programu. Kedykoľvek sa funkcia nazýva, rám zásobníka sa zatlačí do zásobníka.
Rámec zásobníka pozostáva z adries alebo hodnôt parametra funkcie a návratovej adresy, čo znamená, kde by sa mal ovládací prvok vrátiť po dokončení vykonania funkcie.
Definícia haldy
Priraďovanie haldy sa neriadi jednoznačným prístupom; skôr umožňuje náhodné priradenie a priradenie pamäte. Požiadavka na priradenie procesu vráti s ukazovateľom pridelenú oblasť pamäte v haldy a proces získa prístup k oblasti vyhradenej pamäte prostredníctvom ukazovateľa.
Deallokácia sa vykonáva prostredníctvom žiadosti o deallokáciu, ktorá sa líši od zásobníka, v ktorom sa automaticky prideľuje pamäť. Hromada vyvíja diery v alokácii pamäte, keď sa vytvárajú a uvoľňujú dátové štruktúry. Používa sa za behu.
- V zásobníku sa prideľovanie a prideľovanie vykonáva pomocou CPU a je automatické, zatiaľ čo v halde to musí urobiť programátor manuálne.
- Manipulácia s rámom haldy je nákladnejšia ako manipulácia s rámom zásobníka.
- Implementácia zásobníka je zložitá. Naopak, implementácia haldy je jednoduchá.
- Volanie funkcie v zásobníku trvá O (N) času. Oproti tomu trvá halda O (1).
- Implementácia zásobníka trpí hlavne problémom s nedostatkom pamäte. Naopak, hlavným problémom haldy je fragmentácia.
- Prístup k rámcu zásobníka je ľahší ako kôpka, pretože je obmedzená na malú oblasť pamäte a vždy zasiahne medzipamäť, ale haldy sú v pamäti rozptýlené, takže prístup k pamäti môže spôsobiť viac chýb v medzipamäte.
- Zásobník nie je flexibilný, pridelenú veľkosť pamäte nemožno zmeniť. Na druhej strane je halda flexibilná a pridelenú pamäť je možné zmeniť.
- Hromada zaberie viac času na prístup ako stoh.
záver
Priradenie zásobníka je rýchlejšie, ale zložité. Na druhej strane je halda pomalšia, ale jej implementácia je jednoduchšia ako zásobník. Halda je efektívnejšia ako zásobník.