Datastruktur hvor data hentes ut i motsatt rekkefølge av den de blir lagt inn i. Vi sier at dataene er organisert etter LIFO-prinsippet (Last-In-First-Out). Strukturen fungerer som en stabel hvor man kun kan legge til og fjerne elementer fra toppen.

Det å legge til data på toppen av en stakk, kalles for en push-operasjon mens det å fjerne data fra toppen, kalles for en pop-operasjon.

Slike strukturer kan brukes til mange formål, blant annet til å sørge for at prosessoren kan finne tilbake en tidligere tilstand og at den kan reservere private dataområder for prosedyrer eller subrutiner når prosessoren kaller dem opp. En stakk som brukes til dette formålet kalles gjerne for en kallstakk (call stack).

Litt forenklet kan vi si at prosessoren alltid disponerer en informasjonspakke i hukommelsen som inneholder statusinformasjon og andre typer midlertidige data. Denne ligger øverst i kallstakken. Før den går i gang med en prosedyre, legger prosessoren til en ny pakke, skreddersydd for denne prosedyren, på toppen av stakken. Når prosedyren er gjennomført,  vil prosessoren fortsette der den slapp. Da blir pakken fjernet og maskinen går over til å bruke den opprinnelige pakken som nå ligger på toppen.

Hvis prosedyren kaller en underprosedyre, vil maskinen generere enda en pakke, legge den på toppen og så fjerne den igjen når underprosedyren er ferdig. Kallstakken vil altså vokse med én pakke hver gang prosessoren går i gang med en prosedyre og avta tilsvarende så snart prosedyren er gjennomført.

På den måten får alle prosedyrene et eget privat område som ingen andre prosedyrer kan tukle med.

De fleste programmer som kjører på en datamaskin har avsatt plass til en slik stakk. Her ligger pakkene stablet i form av avgrensede dataområder som ligger fysisk rett etter hverandre i hukommelsen.

Prosessorer har vanligvis skreddersydd infrastruktur for håndtering av kallstakken, blant annet et eget dataregister som peker på dataområdet hvor den øverste pakken ligger. Dette kalles for en stakkpeker (stack pointer).

Håndtering av kallstakken blir dermed veldig effektiv. Det å lage en ny pakke handler ganske enkelt om å øke verdien av stakkpekeren slik at den peker på det området i hukommelsen som ligger rett over den øverste pakken. Pakkene fjernes ved å endre verdien tilbake til området nedenfor.

Det er viktig å merke seg at så snart en pakke er fjernet, vil dette området i hukommelsen straks bli gjenbrukt av nye prosedyrer. Dataene vil dermed være tapt for alltid. Data som skal vare litt lengre, må vanligvis plasseres i en heap, en alternativ datastruktur som er langt mindre effektiv enn stakken.

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

Har du spørsmål om artikkelen? Skriv her, så får du svar fra fagansvarlig eller redaktør.

Du må være logget inn for å kommentere.