A memóriakezelés az operációs rendszer alapvető jelensége, amelyet az elsődleges memória kezelésére vagy kezelésére használnak a számítógép memóriahozzáférési jogainak ellenőrzése céljából. A cél az, hogy megakadályozzuk, hogy bármely folyamat hozzáférjen a még nem hozzárendelt memóriához.
Az operációs rendszer az egyes folyamatok számára memóriát oszt fel, amelyet szegmensekre oszt fel. A Stack és a Heap kétféle módon osztja el a memóriát az operációs rendszerben.
A verem szegmenst az automatikusan létrehozott helyi funkcióváltozók tárolására használják, míg a halom szegmenst a dinamikusan elosztott memória tárolására használják.
Mindkettőt a számítógép RAM-ban tárolják, és növekedhetnek és összehúzódhatnak egy program végrehajtása során. Nézzük meg részletesen a kettőt, és hasonlítsuk össze őket, hogy megértsük, melyik a jobb.
A stack szegmens egy memóriakezelési technika, amelyet statikus memóriaelosztáshoz használnak. Ez egy speciális terület a számítógép memóriájában, amelyet a helyi funkciós változók tárolására használnak. Amikor egy függvényt meghívnak, a memóriát minden helyi változóhoz hozzárendelik valahol, és hozzáférhet ezekhez a változókhoz, amikor ismerik azok helyét. A memória blokkok felszabadulnak, amikor a funkció leáll. A verem a folyamat hatékony végrehajtásának egyik módja. Gondoljon rá mint alapvető adatszerkezetre, ahol az elemek egymásra vannak helyezve, mint egy verem. Hasonlóképpen, a helyi változók hozzáférhetők a toló és felbukkanó gombokkal. A tolás az elemeknek a verembe történő hozzáadására utal, és a felbukkanás azt jelenti, hogy az elemeket kihúzzák a veremből. A tételek a veremből hozzáférhetők az utolsó-előbb-ki (LIFO) sorrendben.
A halom a dinamikus memóriaelosztáshoz használt nagy memóriakészletre utal, amely azt jelenti, hogy a memória addig marad lefoglalva, amíg a program le nem fejeződik vagy a memória felszabadul. A memória véletlenszerűen van elosztva, így a memória elérésének nincs egyszerű módja. A verem szegmenstől eltérően az elemeket fordított sorrendben szabadítják fel, ahogyan eredetileg kiosztották. Egyszerűen fogalmazva: a memóriát kérésre allokálják a programok számára, és felszabadítják, amikor már nincs rá szükség. A halom elemei egymástól függetlenek, vagyis a program futásakor hozzáférhetők, és a program befejezésekor felszabadíthatók. Olyan, mint egy globális memóriakészlet, amelyet a globális változók és sok rá hivatkozó változó tárolására használnak.
A számítógépes architektúrában a verem a számítógép memóriájának egy speciális területe, amelyet kifejezetten az automatikus változók számára adnak. A programozás során az automatikus változó egy helyi változó, azaz a változó hatóköre lokális abban a mondatban, amelyben deklarálva van. A memóriát automatikusan hozzárendelik ezekhez a változókhoz, amikor belépnek a blokkba, és a memória felszabadul, amikor kilép. A halom viszont a számítógépes memória azon része, amelyet a dinamikus memória allokációhoz használ, azaz a memória blokkjait véletlenszerű módon osztják el és szétosztják..
A verem a helyi változók tárolására szolgál, amelyek hatókörét a függvény határozza meg. Technikai szempontból a stack támogatja a statikus memória allokációt, amely megfelel a helyi statikus változóknak és hatókör-változóknak. A memória allokálása a program végrehajtása előtt történik, általában a fordítás idején, és az alkalmazott adatstruktúrát veremnek nevezzük. A halom viszont a dinamikus memóriaelosztásra szolgál, azaz a memóriát manuálisan osztják el a futtatás idején egy program végrehajtása során. A programok memóriát kérnek, általában egy csomópont hozzáadásához az adatszerkezethez, és visszaadják, ha nincs rá szükség.
A verem kezelése és optimalizálása a CPU-val történik, és az adatokhoz hozzáférésre kerül a LIFO (last-in-first-out) sorrendben. A LIFO arra az adatmegőrzési módszerre utal, amelyben a memóriakötegekben a memória legfrissebb blokkja szabadul fel, és fordítva. Ez lehetővé teszi a hatékony memóriakezelést. A halom elemei éppen ellenkezőleg, egymástól függetlenek, és az adatokhoz tetszőlegesen hozzáférhetünk, azaz a memóriablokk bármikor kiosztható és felszabadítható, sorrendtől függetlenül. A halmokkal ellentétben a halomnak nincs határozott mintája a memóriablokkok allokálására és elosztására.
A memóriát automatikusan kezeli a verem, és a változók automatikusan allokálódnak és osztódnak el, azaz a verem csak ideiglenes változók számára van fenntartva. A helyi változók aktívvá válnak, amikor egy funkció végrehajtásra kerül, és amikor befejeződik, a változók kikerülnek a hatóköréből, vagyis a változó hatóköre lokális egy függvényhez, és addig létezik, amíg ez a funkció végrehajtódik. A stack-szal ellentétben a memória el van osztva, mivel a program halmozottan fut, ami kissé lassabbá teszi az itt tárolt változók elérését. Mivel a blokkok fenntartására nincs külön megrendelés, a memóriablokkok bármikor kioszthatók és ingyenesek.
Mindkettő a memóriakiosztás leggyakoribb módja, és a számítógép memóriájában tárolódik a hatékony memóriakezelés érdekében. A kötegben lévő memória elérése azonban gyors, mivel a memóriát automatikusan kezeli, míg a halomban a memóriát manuálisan kell kezelni, vagyis a szabad memóriát magának kell elfoglalnia, amikor a blokkokra már nincs szükség. A verem nyilvánvalóan gyorsabb és könnyebben használható rugalmasságának köszönhetően, ám megvan a maga előnyei és hátrányai. Bár a veremnek nincs korlátozása a memória méretére, egy kicsit nehéz megvalósítani. A halom lassabb, mint a verem, de a végrehajtása egyszerűbb.