Stakk er en 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.

Faktaboks

Uttale
stakk
Etymologi

fra engelsk stack 'stabel, haug, stakk'

Også kjent som
stack (engelsk)

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).

Kallstakken

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.

Stakkpekeren

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.

Kallstakken kan bare brukes til midlertidige data

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.

Les mer i Store norske leksikon

Kommentarer

Kommentarer til artikkelen blir synlig for alle. Ikke skriv inn sensitive opplysninger, for eksempel helseopplysninger. Fagansvarlig eller redaktør svarer når de kan. Det kan ta tid før du får svar.

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

eller registrer deg