Stack (informatica): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Regel 23:
 
== Stacks bij de uitvoering van programma's ==
 
Een zogenaamde callstack wordt gebruikt bij het aanroepen van [[subroutine]]s in [[computerprogramma]]'s.
De ''program -counter'', datdie de eerstvolgende uit te voeren instructie bevat, vormt hier het element dat wordt opgeslagen en weer teruggehaald.
De stackpointer wijst naar het bovenste van de stack.
De stack ziet er zo uit bij het uitvoeren van een basis programma met lokale variabelen en parameters bv '''void''' Programma(int temp);
 
De stack ziet er zo uit bij het uitvoeren van een basis programmabasisprogramma met lokale variabelen en parameters, bv. '''<code>void''' Programma(int temp);</code>:
Eerst pusht de compiler de actuele parameters.
 
Daarna wordt de program counter erop gezet.
# Eerst pusht de compiler de actuele parameters.
De basepointer (frame pointer) wordt erop gezet. Deze basepointer wordt gebruikt zodat men weet waar het programma begint.
# Daarna wordt de program -counter erop gezet.
De stackpointer wordt gelijk gesteld aan de basepointer, ze wijzen dus naar hetzelfde.
# De basepointer (frame pointer) wordt erop gezet. Deze basepointer wordt gebruikt zodat men weet waar het programma begint.
Er wordt geheugen vrijgemaakt (stackruimte) voor de lokale variabelen.
# De stackpointer wordt gelijk gesteldgelijkgesteld aan de basepointer, ze wijzen dus naar hetzelfde.
# Er wordt geheugen vrijgemaakt (stackruimte) voor de lokale variabelen.
 
Na het uitvoeren van de code zal erhet ditvolgende gebeuren.:
# De stackpointer wordt gelijkgesteld aan de basepointer waardoor alle lokale variabelen worden 'verwijderd'. (Ze zijn er nog, maar niets kan eraan.)
# De basepointer gaat terug gezet worden naar waar het ervoor op stond (Bijbij het vorige programma).
# De programcounterprogram-counter gaat terug wijzen naar het returnaddressreturnadres, dus naar de procedure die deze heeft opgeroepen.
 
[http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Call_stack_layout.svg/342px-Call_stack_layout.svg.png Foto van de stack]