[CS] stack- en framepointers

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Flipper
Posts: 193

[CS] stack- en framepointers

Post#1 » Tue Dec 11, 2012 10:00 pm

Is er iemand die me het verschil tussen een stackpointer en een framepointer kan uitleggen? Ik heb die verschillen helemaal niet goed door.. :(

Ik probeer ook al een frame te tekenen op papier, maar...

Image
They call him Flipper, Flipper, faster than lightning,
No-one you see, is smarter than he,
And we know Flipper, lives in a world full of wonder,
Flying there-under, under the sea!

Disparv
Posts: 18

Re: [CS] stack- en framepointers

Post#2 » Wed Dec 12, 2012 7:32 am

Stackpointer wijst naar de top van de stack, en de framepointer wijst naar de scope boven de functie die opgeroepen is. Dus als ge een functie recursief oproept blijft de framepointer naar hetzelfde wijzen, maar de stackpointer niet.

User avatar
Flipper
Posts: 193

Re: [CS] stack- en framepointers

Post#3 » Wed Dec 12, 2012 7:15 pm

Disparv wrote:Stackpointer wijst naar de top van de stack, en de framepointer wijst naar de scope boven de functie die opgeroepen is. Dus als ge een functie recursief oproept blijft de framepointer naar hetzelfde wijzen, maar de stackpointer niet.
Niet helemaal juist, ik heb het aan professor Vangheluwe gevraagd en het is me nu al veel duidelijker geworden:

De stackpointer wijst naar de top van de stack (of net er boven, het is maar hoe je het zelf wilt). De stackpointer wijst steeds naar de huidige statement (dat kan vb. een add zijn, of een call naar een andere fuctie.). Na het uitvoeren van de statement gaat de stackpointer dus naar het volgende statement in de stack frame (het zogenaamd "pop" eigenlijk).

De framepointer wijst naar de huidige functie die opgeroepen is (vb. Fibonacci(5) ), wanneer een andere functie (vb. Factorial(12) om maar wat te verzinnen) wordt opgeroepen, zal de framepointer dus naar die functie wijzen. In die zin is de framepointer minder "nerveuzer" (dixit Vangheluwe) dan de stackpointer. (want de stackpointer verandert steeds statement per statement, de framepointer verandert pas per functie (en een functie kan wel meerdere statements tellen) ).

Het is dus niet correct dat de framepointer wijst naar de scope boven de functie (dan heb je het over de dynamic/static linker).

Ook dat de framepointer naar hetzelfde wijst in geval van recursieve oproepen is niet correct. (ik heb dat ook gevraagd aan Vangheluwe) De framepointer verandert wel degelijk wanneer een recursieve oproep wordt gedaan (de framepointer zal dan wijzen naar de zojuist opgeroepen functie). Je kunt dus de body van een functie (ongeacht dat dit recursief is) en zijn argumenten en return zien als één frame (vandaar frame pointer).


[Om er nog een extra verhaal aan te breien, heeft professor Vangheluwe me nog weten te vertellen dat een framepointer eigenlijk niet echt nodig is, je kan dus best wel zonder, maar het kan voor ons een handig hulpmiddeltje zijn..]
They call him Flipper, Flipper, faster than lightning,
No-one you see, is smarter than he,
And we know Flipper, lives in a world full of wonder,
Flying there-under, under the sea!

User avatar
djgl3nn
WOZ
Posts: 1938

Re: [CS] stack- en framepointers

Post#4 » Wed Dec 12, 2012 10:00 pm

Stackpointer wijst altijd naar de huidige top of the stack, niet echt naar de huidige statement, das eerder de program counter.

Frame pointer wijst naar het begin van de huidige frame. De static link, wijst naar de frame van de enclosing procedure. (Dus recursieve frames hebben allemaal dezelfde static link, namelijk die van de laatste gecallde enclosing procedure.)

Dynamic link wijst altijd naar de frame van de procedure die de huidige procedure heeft gecallt.
(In die zin, als ge een nieuwe functie oproept, en dus een nieuwe frame aanmaakt, kunt ge de huidige framepointer gewoon in de dynamic link steken van de nieuwe frame, en dan de framepointer aanpassen. Dan heeft die wel iet of wa nut.)

De static link is nodig om de waarden van globale variabelen op te vragen, de dynamic link kan gebruikt worden om de frame pointer te herstellen na poppen.
WINAK Schacht 2009-2010
WINAK Sport 2010-2011
WINAK Mentor Informatica 2011-2012
WINAK Ouwe Zak 2012-...

UA Sportraad Webmaster 2012-...

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 3 guests

cron