Minneshantering är ett grundläggande fenomen av operativsystemet som används för att hantera eller hantera primärminne för att styra minnesåtkomsträttigheterna på datorn. Målet är att förhindra att någon process får åtkomst till minnet som ännu inte har tilldelats det.
Operativsystemet tilldelar minne för varje process som är uppdelad i segment. Stack and Heap är de två sätt som minnet tilldelas i operativsystemet.
Stack segment används för att lagra lokala funktionsvariabler som skapas automatiskt, medan höpsegment används för dynamiskt tilldelat minne.
Båda lagras i dator RAM och de kan växa och krympa under genomförandet av ett program. Låt oss diskutera de två i detalj och jämföra dem för att förstå vilken som är bättre.
Stack segment är en minneshanteringsteknik som används för statisk minnesallokering. Det är ett speciellt område i datorminnet som används för att lagra lokala funktionsvariabler. När en funktion kallas, tilldelas minne till alla lokala variabler någonstans och du kan komma åt dessa variabler som du känner till deras platser. Minnesblocken befrias när funktionen avslutas. Stack är ett sätt att genomföra denna process effektivt. Tänk på det som en grundläggande datastruktur där objekt är ordnade ovanpå varandra som en stapel. På samma sätt kan lokala variabler nås med att trycka och poppa. Pushing hänvisar till att lägga till objekt i stapeln och poppmedel hämtar objekt från stapeln. Objekt kan nås från stapeln i sista-in-first-out-ordern (LIFO).
Höft hänvisar till en stor minnesmagasin som används för dynamisk minnesallokering vilket innebär att minnet förblir allokerat tills programmet avslutas eller minnet frigörs. Minne är allokerat slumpmässigt så det finns inget enkelt sätt att komma åt minnet. Till skillnad från stapelsegment frigörs element i omvänd ordning eftersom de ursprungligen tilldelades. I enkla termer är minnet allokerat till programmen efter förfrågan och befriad när det inte längre krävs. Höjens delar är oberoende av varandra vilket betyder att de kan nås när programmet körs och befrias när programmet avslutas. Det är som en global minnespool som används för att lagra globala variabler och många variabler som refererar till det.
I datorarkitektur är en stapel en speciell region i datorns minne som uttryckligen tilldelats för automatiska variabler. I programmering är den automatiska variabeln en lokal variabel, vilket betyder att variabelns räckvidd är lokal i det block där det deklareras. Minne tilldelas automatiskt till dessa variabler vid inmatning till blocket och minnet frigörs vid utgången. Höjden är å andra sidan den del av datorminnet som används för dynamiska minnesallokeringar, vilket innebär att minnesblock tilldelas och avdelas slumpmässigt.
Stack används för att lagra lokala variabler och omfattningen av dessa definieras inom funktionen. I teknisk termer stöder stapel statisk minnesallokering som motsvarar lokala statiska variabler och omfattningsvariabler. Minne tilldelas innan programmet körs, vanligen vid kompileringstiden och datastrukturen som används kallas stapel. Höjden används å andra sidan för dynamisk minnesallokering, vilket innebär att minnet tilldelas manuellt under körtiden under genomförandet av ett program. Program begär minne, vanligtvis för att lägga till en nod i datastrukturen och returnerar om det inte behövs.
En stapel hanteras och optimeras av CPU: n och data öppnas i en sista-in-first-out-order (LIFO). LIFO refererar till metoden för datalagring i minnesstaplar där det senaste minnesblocket är det första som frigörs och vice versa. Detta ger effektiv minneshantering. Höjdselementen är tvärtom oberoende av varandra och data kan nås med godtyckligt vilket innebär att ett minnesblock kan tilldelas och befrias när som helst oberoende av deras order. Till skillnad från staplar har hajar inget bestämt mönster för allokering och avallokering av minnesblock.
Minne hanteras automatiskt i stapeln och variablerna allokeras och fördelas automatiskt vilket betyder att stacken endast är reserverad för temporära variabler. De lokala variablerna blir aktiva när en funktion exekveras och när den upphör, går variablerna utanför räckvidden, vilket betyder att variabelns räckvidd är lokal för en funktion och existerar så länge den funktionen exekveras. Till skillnad från i stack, tilldelas minne när programmet körs i heap vilket gör det lite långsammare att få tillgång till variablerna som lagras här. Eftersom det inte finns någon specifik ordning vid reservering av block kan minnesblocken tilldelas och frigöras när som helst.
Båda är de vanligaste sätten att minnasallokering och lagras i datorns RAM för effektiv minneshantering. Åtkomst till minne i en stapel är dock snabbt eftersom minnet hanteras automatiskt medan minnet ska hanteras manuellt i minnet, vilket innebär att du måste ange det fria minnet själv när blocken inte längre behövs. Stack är uppenbarligen snabbare och lättare att använda tack vare dess flexibilitet, men det har sin rättvisa andel av fördelar och nackdelar. Även om stacken har ingen gräns för minnesstorlek är det lite svårt att implementera. Höjden är långsammare än en stapel, men dess genomförande är enklare.