Upravljanje pomnilnika je temeljni pojav operacijskega sistema, ki se uporablja za upravljanje ali upravljanje primarnega pomnilnika za nadzor pravic dostopa do pomnilnika v računalniku. Cilj je preprečiti, da bi kateri koli postopek dostopal do pomnilnika, ki mu še ni bil dodeljen.
Operacijski sistem dodeli pomnilnik za vsak postopek, ki je razdeljen na segmente. Stack in Heap sta dva načina za dodelitev pomnilnika v operacijskem sistemu.
Segment zlaganja se uporablja za shranjevanje lokalnih funkcijskih spremenljivk, ki se ustvarijo samodejno, medtem ko se heap segment uporablja za dinamično dodeljen pomnilnik.
Oba sta shranjena v računalniškem RAM-u in lahko med izvajanjem programa rasteta in krčita. Podrobneje se pogovorimo o obeh in jih primerjamo, da bomo razumeli, katera je boljša.
Odsek skladov je tehnika upravljanja pomnilnika, ki se uporablja za dodeljevanje statičnega pomnilnika. To je posebno območje v računalniškem pomnilniku, ki se uporablja za shranjevanje lokalnih funkcijskih spremenljivk. Ko se pokliče funkcija, je nekje dodeljen pomnilnik vsem lokalnim spremenljivkam in do teh spremenljivk lahko dostopate, ko poznate njihove lokacije. Ko preneha funkcija, se pomnilniški bloki sprostijo. Zlaganje je eden od načinov za učinkovito izvajanje tega procesa. Zamislite si to kot osnovno strukturo podatkov, kjer so elementi razporejeni drug na drugem kot sklad. Podobno je mogoče dostopati do lokalnih spremenljivk s potiskanjem in skokom. Potiskanje se nanaša na dodajanje elementov v sveženj in potiskanje pomeni pridobivanje elementov iz sklada. Do elementov lahko dostopate iz sklada po vrstnem redu LIFO.
Heap se nanaša na velik pomnilnik, ki se uporablja za dinamično dodelitev pomnilnika, kar pomeni, da ostane pomnilnik dodeljen, dokler se program ne ukine ali sprosti pomnilnik. Pomnilnik je dodeljen naključno, tako da do pomnilnika ni preprostega načina. Za razliko od segmenta skladov se elementi sprostijo v obratnem vrstnem redu, kot so bili prvotno razporejeni. Preprosto povedano, pomnilnik se programom dodeli na zahtevo in sprosti, ko ni več potreben. Elementi kopice so med seboj neodvisni, kar pomeni, da je do njih mogoče dostopati, ko program teče in se sprosti, ko se program konča. Je kot globalno pomnilniško polje, ki se uporablja za shranjevanje globalnih spremenljivk in številnih spremenljivk, na katere se sklicuje.
V računalniški arhitekturi je sveženj posebno območje računalniškega pomnilnika, ki je izrecno dodeljen samodejnim spremenljivkam. Pri programiranju je samodejna spremenljivka lokalna spremenljivka, kar pomeni, da je obseg spremenljivke lokalni za blok, v katerem je deklarirana. Pomembnim spremenljivkam se ob vstopu v blok dodeli pomnilnik in spomin se sprosti ob izhodu. Heap, na drugi strani, je del pomnilnika računalnika, ki se uporablja za dinamične dodelitve pomnilnika, kar pomeni, da so bloki spomina razporejeni in razdeljeni naključno.
Stack se uporablja za shranjevanje lokalnih spremenljivk, katerih obseg je opredeljen v funkciji. Tehnično gledano stack podpira dodeljevanje statičnega pomnilnika, ki ustreza lokalnim statičnim in spremenljivkam obsega. Pomnilnik je dodeljen pred izvajanjem programa, običajno v času prevajanja in uporabljena podatkovna struktura se imenuje stack. Heap se na drugi strani uporablja za dinamično razporejanje pomnilnika, kar pomeni, da se pomnilnik ročno dodeli med izvajanjem programa. Programi zahtevajo pomnilnik, običajno za dodajanje vozlišča v strukturo podatkov in po potrebi vrnejo vozlišče.
CPU upravlja in optimizira CPU, podatki pa so dostopni v vrstnem redu LIFO. LIFO se nanaša na način shranjevanja podatkov v pomnilniških skladiščih, v katerih se sprosti najnovejši blok pomnilnika in obratno. To omogoča učinkovito upravljanje spomina. Nasprotno, elementi kopice so med seboj neodvisni, do podatkov pa lahko dostopamo poljubno, kar pomeni, da se lahko spominski blok dodeli in sprosti kadarkoli, ne glede na njihov vrstni red. Za razliko od skladov, množice nimajo določenega vzorca za dodeljevanje in premestitev pomnilniških blokov.
Pomnilnik se samodejno upravlja v skladovnici in spremenljivke se samodejno dodelijo in razporedijo, kar pomeni, da je sklad rezerviran samo za začasne spremenljivke. Lokalne spremenljivke postanejo aktivne, ko se funkcija izvrši in ko se ta konča, spremenljivke izstopijo iz področja, kar pomeni, da je obseg spremenljivke lokalni funkciji in obstaja, dokler se ta funkcija izvaja. Za razliko od skladov je dodeljen pomnilnik, ko program teče v kopici, zaradi česar je dostop do spremenljivk, shranjenih tukaj, nekoliko počasnejši. Ker ni nobenega posebnega vrstnega reda pri rezerviranju blokov, je mogoče spominske bloke dodeliti in brezplačno kadar koli.
Oba sta najpogostejša načina razporejanja pomnilnika in sta shranjena v računalniškem pomnilniku za učinkovito upravljanje s pomnilnikom. Vendar pa je dostop do pomnilnika v sveženju hiter, ker s pomnilnikom upravljamo samodejno, medtem ko v kopici s pomnilnikom upravljate ročno, kar pomeni, da morate sami dodeliti prosti pomnilnik, ko bloki niso več potrebni. Zahvaljujoč prilagodljivosti je Stack očitno hitrejši in enostavnejši za uporabo, vendar ima dober delež prednosti in slabosti. Čeprav sklad ni omejen na velikost pomnilnika, ga je malo težko implementirati. Heap je počasnejši od zlaganja, vendar je njegova izvedba enostavnejša.