Razlika med Stackom in Heapom
Vsebina
Stack in Heap sta spominska segmenta, ki se uporabljata v tehniki dodeljevanja pomnilnika. Primarna razlika med Stackom in kopico je, da sklad vsebuje linearno in zaporedno razporeditev pomnilnika, ki se uporablja pri statični dodelitvi pomnilnika, medtem ko heap deluje kot območje pomnilniškega prostora, ki je pomnilnik dodelil naključno (dinamična razporeditev pomnilnika).
Hitrost je glavni parameter, ki razlikuje skladanje in kopico; stack je bistveno hitrejši od kopice.
- Primerjalna tabela
- Opredelitev
- Ključne razlike
- Zaključek
Primerjalna tabela
Osnove za primerjavo | Zložite | Kup |
---|---|---|
Osnovni | Pomnilnik je dodeljen (LIFO) Zadnja na prvi način. | Pomnilnik je razporejen po naključnem vrstnem redu. |
Dodelitev in dodelitev | Samodejno | Priročnik |
Cena | Manj | Več |
Izvajanje | Težko | Preprosto |
Pokliče | O (N) | O (1) |
Težava | Pomanjkanje spomina | Razdrobljenost spomina |
Referenčna lokalnost | Odlično | Ustrezno |
Prilagodljivost | Fiksna velikost in ni prilagodljiv | Velikost je možna |
Čas dostopa | Hitreje | Počasneje |
Opredelitev Stack
Dodeljevanje skladov sledi strategiji LIFO (Last in first out) za dodelitev pomnilnika procesom s pomočjo push in pop operacije. Vsak blok v pomnilniku je določene velikosti, ki ga ni mogoče razširiti ali skrčiti. Zadnji vnos v skladovnici je dostopen v vsakem trenutku. Sklad uporablja neprekinjeni pomnilnik, kjer kazalec, imenovan kot osnovni niz, kaže na prvi vnos sklada in drug kazalec, ki je imenovan kot vrh sklada, kaže na zadnji vnos sklada.
Stack podpira tudi klice funkcij. Klic funkcije lahko vsebuje zbirko vnosov v nizu, znan je kot okvir skladanja. Drugo ime ogrodja skladovnice je aktivacijski zapis v con prevajalniku, saj shranjuje podatke, uporabljene v času sestavljanja programa. Kadarkoli se funkcija imenuje, se okvir zlaganja potisne v sveženj.
Okvir zlaganja je sestavljen iz naslovov ali vrednosti parametra funkcije in povratnega naslova, ki pomeni, kam naj se vrne kontrola po dokončanju funkcije.
Opredelitev Heap
Dodelitev kopice ne sledi nobenemu dokončnemu pristopu; raje omogoča naključno dodeljevanje in dodelitev pomnilnika. Zahteva za dodelitev s postopkom se vrne s kazalcem na dodeljeno pomnilniško območje v kopici in postopek prek kazalca dostopa do dodeljenega pomnilnega območja.
Prerazporeditev se izvede prek zahteve za premestitev, ki je drugačna od svežnja, v katerem se pomnilnik samodejno razporedi. Kopica razvije luknje v dodelitvi pomnilnika, ko se gradijo in sprostijo podatkovne strukture. Uporablja se med izvajanjem.
- V sveženju dodeljevanje in premestitev opravi CPU in je samodejno, medtem ko mora programer to storiti ročno.
- Ravnanje z ogrodjem je dražje od ravnanja z okvirjem.
- Izvedba sklada je zapletena. Nasprotno je izvedba kopice preprosta.
- Funkcijski klic v svežnju traja O (N) čas. V nasprotju s tem traja O (1) čas v kopici.
- Izvajanje skladov večinoma trpi zaradi pomanjkanja pomnilnika. Nasprotno, glavna težava v kopici je razdrobljenost.
- Dostop do okvira do nabora je lažji od kupa, saj je sklad omejen na majhno območje pomnilnika in vedno zadene predpomnilnik, vendar so kupi razpršeni po celotnem pomnilniku, tako da lahko dostop do pomnilnika povzroči več zamud v predpomnilniku.
- Zlaganje ni prilagodljivo, dodeljene velikosti pomnilnika ni mogoče spremeniti. Po drugi strani je kopica prilagodljiva, dodeljeni pomnilnik pa se lahko spremeni.
- Kopa potrebuje več časa za dostop kot kup.
Zaključek
Razporeditev skladov je hitrejša, vendar zapletena. Po drugi strani je kopica počasnejša, vendar je njegova izvedba enostavnejša od nabora. Heap je učinkovitejši od zlaganja.