Geheugenbeheer is een fundamenteel fenomeen van het besturingssysteem dat wordt gebruikt voor het verwerken of beheren van het primaire geheugen om de toegangsrechten voor het geheugen op de computer te regelen. Het doel is om te voorkomen dat een proces toegang krijgt tot het geheugen dat nog niet is toegewezen.
Het besturingssysteem wijst geheugen toe voor elk proces dat is onderverdeeld in segmenten. Stack and Heap zijn de twee manieren waarop het geheugen in het besturingssysteem wordt toegewezen.
Het stapelingssegment wordt gebruikt voor het opslaan van lokale functievariabelen die automatisch worden gemaakt, terwijl het huissegment wordt gebruikt voor dynamisch toegewezen geheugen.
Beide worden opgeslagen in computer-RAM en ze kunnen groeien en krimpen tijdens de uitvoering van een programma. Laten we de twee in detail bespreken en vergelijken om te begrijpen welke beter is.
Stacksegment is een geheugenbeheertechniek die wordt gebruikt voor statische geheugentoewijzing. Het is een speciaal gebied in het geheugen van de computer dat wordt gebruikt om lokale functievariabelen op te slaan. Wanneer een functie wordt aangeroepen, wordt het geheugen ergens toegewezen aan alle lokale variabelen en hebt u toegang tot deze variabelen terwijl u hun locaties kent. De geheugenblokken worden vrijgegeven wanneer de functie wordt beëindigd. Stack is een van de manieren om dit proces efficiënt te implementeren. Beschouw het als een basisgegevensstructuur waarbij items als een stapel op elkaar worden geplaatst. Evenzo kunnen lokale variabelen worden benaderd met duwen en knallen. Duwen verwijst naar het toevoegen van items aan de stapel en knallen betekent het ophalen van items uit de stapel. Items kunnen worden geopend vanaf de stapel in de LIFO-volgorde (first-in-first-out).
Heap verwijst naar een grote pool van geheugen die wordt gebruikt voor dynamische geheugentoewijzing, wat betekent dat het geheugen blijft toegewezen totdat het programma wordt beëindigd of het geheugen wordt vrijgegeven. Geheugen wordt willekeurig toegewezen, dus er is geen gemakkelijke manier om toegang tot het geheugen te krijgen. In tegenstelling tot het stacksegment, worden elementen in de omgekeerde volgorde vrijgegeven zoals ze oorspronkelijk waren toegewezen. In eenvoudige bewoordingen wordt het geheugen op verzoek aan de programma's toegewezen en vrijgegeven wanneer het niet langer nodig is. Elementen van de heap zijn onafhankelijk van elkaar, wat betekent dat ze toegankelijk zijn terwijl het programma wordt uitgevoerd en vrijgegeven wanneer het programma wordt beëindigd. Het is als een globale geheugenpool die wordt gebruikt om globale variabelen op te slaan en vele variabelen die ernaar verwijzen.
In de computerarchitectuur is een stapel een speciale regio van het geheugen van de computer die expliciet is toegewezen voor automatische variabelen. Bij het programmeren is de automatische variabele een lokale variabele, wat betekent dat het bereik van de variabele lokaal is in het blok waarin het wordt gedeclareerd. Het geheugen wordt automatisch toegewezen aan deze variabelen bij het betreden van het blok en het geheugen wordt vrijgegeven bij het verlaten van het blok. Heap, aan de andere kant, is het gedeelte van het computergeheugen dat wordt gebruikt voor dynamische geheugentoewijzingen, wat betekent dat blokken geheugen worden toegewezen en willekeurig worden toegewezen.
Stack wordt gebruikt om lokale variabelen op te slaan en waarvan de reikwijdte binnen de functie wordt gedefinieerd. In technische termen ondersteunt stack de toewijzing van statisch geheugen die overeenkomt met lokale statische variabelen en scope-variabelen. Geheugen wordt toegewezen voordat het programma wordt uitgevoerd, meestal op de compileertijd en de gebruikte datastructuur wordt stack genoemd. Heap, aan de andere kant, wordt gebruikt voor dynamische geheugentoewijzing, wat betekent dat geheugen tijdens de looptijd tijdens het uitvoeren van een programma handmatig wordt toegewezen. Programma's vragen geheugen aan, meestal voor het toevoegen van een knooppunt aan de gegevensstructuur en worden geretourneerd als dit niet nodig is.
Een stack wordt beheerd en geoptimaliseerd door de CPU en de gegevens worden geopend in een last-in-first-out (LIFO) volgorde. LIFO verwijst naar de methode van gegevensopslag in geheugenstapels waarin de meest recente geheugenblok de eerste is die wordt vrijgegeven en omgekeerd. Dit zorgt voor efficiënt geheugenbeheer. Elementen van de heap zijn integendeel onafhankelijk van elkaar en gegevens kunnen willekeurig worden benaderd, wat betekent dat een geheugenblok op elk moment kan worden toegewezen en vrijgegeven, ongeacht hun bestelling. In tegenstelling tot stapels hebben hopen geen duidelijk patroon voor toewijzing en deallocatie van geheugenblokken.
Geheugen wordt automatisch in stack beheerd en de variabelen worden automatisch toegewezen en automatisch vrijgegeven, wat betekent dat de stack alleen is gereserveerd voor tijdelijke variabelen. De lokale variabelen worden actief wanneer een functie wordt uitgevoerd en wanneer deze wordt beëindigd, vallen de variabelen buiten het bereik, wat betekent dat het bereik van de variabele lokaal is voor een functie en bestaat zolang deze functie wordt uitgevoerd. In tegenstelling tot in stack, wordt geheugen toegewezen als het programma in de heap wordt uitgevoerd, waardoor het wat langzamer wordt om toegang te krijgen tot de variabelen die hier zijn opgeslagen. Omdat er geen specifieke volgorde is in het reserveren van blokken, kunnen geheugenblokken op elk moment worden toegewezen en vrijgemaakt.
Beide zijn de meest voorkomende manieren van geheugentoewijzing en worden opgeslagen in het RAM van de computer voor efficiënt geheugenbeheer. Toegang tot geheugen in een stapel is echter snel omdat het geheugen automatisch wordt beheerd, terwijl in het geheugen het geheugen handmatig moet worden beheerd, wat betekent dat u het vrije geheugen zelf moet toewijzen wanneer de blokken niet langer nodig zijn. Stack is natuurlijk sneller en gemakkelijker te gebruiken dankzij zijn flexibiliteit, maar het heeft zijn eerlijke voors en tegens. Hoewel stack geen limiet heeft voor de geheugengrootte, is het een beetje moeilijk te implementeren. Heap is langzamer dan een stapel, maar de implementatie ervan is eenvoudiger.