Känner du din stack från din hög? Särskilt för lågnivåprogrammering är det viktigt att känna till skillnaden mellan dessa typer av minneslagring.
Om du är en programmerare eller någon som har ett stort intresse för datorer, har du säkert stött på stack- och heapminne. Många människor använder felaktigt dessa termer omväxlande. Det är viktigt att veta hur minnesallokering ser ut och hur stack- och heapallokering skiljer sig.
Du kanske är bekant med begreppen heap och stack som datastrukturer. Men du bör komma ihåg att tilldelning av heap- och stackminne är ett annat koncept. Att känna till dessa grundläggande principer kan göra stor skillnad när man felsöker en komplex kodningsfråga eller står inför en tuff anställningsintervju. Läs vidare när vi kommer ner till förståelsen av stack- och heapminnestilldelning.
Stack minnesallokering
Stackminnestilldelning är en temporär allokeringsmetod som sker i funktionsanropsstacken. Kompilatorn hanterar minnet för att allokera för temporära variabler skapade av en programmerares funktion. När den har kört koden helt i en funktion kommer kompilatorn automatiskt free detta tillfälliga minne.
Ett program kan komma åt variabler i stacken mycket snabbt eftersom de lagras direkt i huvudminnet. En funktion eller metod kan också anropa en annan funktion/metod. Det är därför viktigt att kompilatorn effektivt hanterar de olika variablerna för varje funktionsanrop.
Bildkredit: Wikimedia Commons
Ett program allokerar stackminne när det anropar en funktion för första gången. Om en programmerare deklarerar en variabel eller array inom den specifika funktionen, kommer kompilatorn att reservera ytterligare minne på funktionsanropsstacken.
Det är viktigt att komma ihåg att kompilatorn gör allokeringen och deallokeringen av stacken automatiskt. Som ett resultat behöver programmeraren inte oroa sig för det. Det är dock bra att programmera att förbruka så lite stackminne som möjligt. Det innebär att skriva kod intelligent, på ett sätt som inte kräver några tillfälliga metodvariabler.
Programmerare gör ofta felet att använda en pekare för att komma åt data i stackminnet. Men funktionsanropsstacken avallokeras när funktionen återvänder. Ibland kommer pekaren att returnera korrekt data trots att stacken har blivit helt avallokerad. Men för det mesta kommer den ogiltiga minnespekaren att returnera ett skräpvärde. Det rekommenderas alltid att undvika sådan opålitlig användning av pekare.
Högminnestilldelning
Minne som allokeras i högen kallas ofta för dynamisk minnesallokering. Till skillnad från stackminne är det programmerarens jobb att allokera och avallokera minne i högen. Du kan tänka på högminne som en bit minne som är tillgängligt för programmeraren.
Storleken på högminnet beror på storleken på det virtuella minnet som är tillgängligt för programmet. Högminne är långsammare att komma åt jämfört med data som lagras i funktionsanropsstacken. Programmerare kan explicit allokera och deallokera block i högen. Detta gör att de kan spara returvärdet för funktioner eller variabler utan att stöta på skräpvärden och överskrivna minnessegment.
I vissa programmeringsspråk som C++ använder programmerare ny nyckelord för att tilldela den nödvändiga minnesstorleken och radera att deallokera. Det anses också vara god praxis att återställa pekarna till null för att undvika odefinierat beteende.
Eftersom programmeraren explicit hanterar heap-minne är de ansvariga för att frigöra det innan programmet avslutas. Underlåtenhet att korrekt hantera explicit deklarerat minne kan orsaka minnesläckor och hängande pekare. Detta kan göra att din kod får oväntade odefinierade uppdelningar.
En bra programmerare känner till sitt minne
Minnestilldelning är en viktig del av hur program fungerar. En bra programmerare måste vara effektiv i att utnyttja systemresurser. Genom att förstå de intrikata detaljerna i stack- och heapminnestilldelning kan du bli en bättre programmerare.
Om författaren
M. Fahad Khawaja (91 artiklar publicerade)
Fahad är författare på MakeUseOf och studerar för närvarande datavetenskap. Som en ivrig teknikskribent ser han till att han håller sig uppdaterad med den senaste tekniken. Han är särskilt intresserad av fotboll och teknik.
Mer från M. Fahad Khawaja
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
