Vad är en stack?
En stack är ett speciellt område i datorns minne som lagrar tillfälliga variabler som skapats av en funktion. I stack deklareras, lagras och initieras variabler under körning.
Det är ett tillfälligt lagringsminne. När datoruppgiften är klar raderas variabelns minne automatiskt. Stapelsektionen innehåller mestadels metoder, lokala variabler och referensvariabler.
I den här handledningen lär du dig,
- Vad är Stack?
- Vad är Heap?
- Viktiga skillnader mellan Stack och Heap
- Fördelar med att använda Stack
- Fördelar med att använda Heap
- Nackdelar med att använda Stack
- Nackdelar med att använda Heap
- När ska jag använda Heap eller stack?
Vad är Heap?
Heapen är ett minne som används av programmeringsspråk för att lagra globala variabler. Som standard lagras alla globala variabler i heapminne. Den stöder dynamisk minnestilldelning.
Heapen hanteras inte automatiskt för dig och hanteras inte så tätt av CPU: n. Det är mer som en fritt flytande minnesregion.
NYCKELSKILL
- Stack är en linjär datastruktur medan Heap är en hierarkisk datastruktur.
- Stackminne kommer aldrig att fragmenteras medan Heap-minne kan bli fragmenterat när minnesblock först allokeras och sedan frigörs.
- Stack får endast åtkomst till lokala variabler medan Heap låter dig komma åt variabler globalt.
- Stackvariabler kan inte ändras medan Heap-variabler kan ändras.
- Stackminne allokeras i ett sammanhängande block medan Heapminne allokeras i valfri slumpmässig ordning.
- Stack kräver inte att de-allokera variabler medan det i Heap behövs avallokering.
- Stackallokering och deallocation görs av kompilatorinstruktioner medan Heapallokering och deallocation görs av programmeraren.
Viktiga skillnader mellan Stack och Heap
Parameter | Stack | Högen |
---|---|---|
Typ av datastrukturer | En stack är en linjär datastruktur. | Heap är en hierarkisk datastruktur. |
Åtkomsthastighet | Snabb åtkomst | Långsammare jämfört med stack |
Rymdhantering | Utrymme som hanteras effektivt av OS så att minnet aldrig blir fragmenterat. | Heap Space används inte lika effektivt. Minne kan splittras när minnesblock först allokeras och sedan frigörs. |
Tillgång | Endast lokala variabler | Det låter dig komma åt variabler globalt. |
Gräns för rymdstorlek | Begränsa stapelstorleken beroende på operativsystemet. | Har ingen specifik gräns för minnesstorlek. |
Ändra storlek | Variabler kan inte ändras | Variabler kan ändras. |
Minnesallokering | Minne allokeras i ett sammanhängande block. | Minne tilldelas i valfri slumpmässig ordning. |
Allokering och omfördelning | Görs automatiskt av kompilatorinstruktioner. | Det görs manuellt av programmeraren. |
Deallocation | Kräver inte att avdela variabler. | Explicit avdelning behövs. |
Kosta | Mindre | Mer |
Genomförande | En stack kan implementeras på tre sätt, enkelt baserad på array, med dynamiskt minne och länkad lista. | Heap kan implementeras med array och träd. |
Huvudproblem | Brist på minne | Minnesfragmentering |
Referensens lokalitet | Instruktioner för automatisk sammanställningstid. | Lämplig |
Flexibilitet | Fixad storlek | Ändring av storlek är möjlig |
Åtkomsttid | Snabbare | Långsammare |
Fördelar med att använda Stack
Här är fördelarna / fördelarna med att använda stack:
- Hjälper dig att hantera data i en LIFO-metod (Last In First Out) som inte är möjlig med länkad lista och array.
- När en funktion kallas lagras de lokala variablerna i en stack och förstörs automatiskt när de returneras.
- En stack används när en variabel inte används utanför den funktionen.
- Det låter dig styra hur minnet allokeras och omplaceras.
- Stack rensar automatiskt upp objektet.
- Inte lätt skadad
- Variabler kan inte ändras.
Fördelar med att använda Heap
Fördelar / fördelar med att använda högminne är:
- Heap hjälper dig att hitta det största och lägsta antalet
- Garbage collection körs på högminnet för att frigöra minnet som används av objektet.
- Heap-metoden används också i Priority Queue.
- Det låter dig komma åt variabler globalt.
- Heap har ingen gräns för minnesstorlek.
Nackdelar med att använda Stack
Nackdelar / nackdelar med att använda Stack-minne är:
- Stackminnet är mycket begränsat.
- Att skapa för många objekt på stacken kan öka risken för stacköverflöde.
- Slumpmässig åtkomst är inte möjlig.
- Variabel lagring kommer att skrivas över, vilket ibland leder till odefinierat beteende hos funktionen eller programmet.
- Stapeln faller utanför minnesområdet, vilket kan leda till onormal avslutning.
Nackdelar med att använda Heap
Nackdelar / nackdelar med att använda Heaps-minne är:
- Det kan ge maximalt minne som ett operativsystem kan tillhandahålla
- Det tar mer tid att beräkna.
- Minneshantering är mer komplicerat i heapminne eftersom det används globalt.
- Det tar för mycket tid vid körning jämfört med stacken.
När ska jag använda Heap eller stack?
Du bör använda heap när du behöver tilldela ett stort minnesblock. Till exempel vill du skapa en storleksmatris eller stor struktur för att hålla den variabeln länge och sedan bör du fördela den på högen.
Men om du arbetar med relativt små variabler som bara krävs tills funktionen som använder dem är vid liv. Då måste du använda stacken, vilket är snabbare och enklare.