[Prog] extra info Run-time Stack?

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
zarry
Posts: 212

[Prog] extra info Run-time Stack?

Post#1 » Wed Jan 03, 2007 7:54 pm

wtf?! :shock:
wa een kut informatie is er rond dees, iemand da daar nen deftigen uitleg over heeft want die slides die zeggen geen k****!
ik was wel in die les maarja.. ge kent da *geeuw*.. had geen papier bij en ben al vergeten wa die daarover te zegge had. :roll:
jieeee en mercieeee
Ik spreek Zwarryzwaniaans en jij?

User avatar
Nick
Prosenior
Posts: 1850
Contact:

Post#2 » Wed Jan 03, 2007 11:24 pm

kben nooit goed in zoiet uitleggen,
maar doe zoals mij, en gebruik de 2 beste vrienden van de mens: Google en Wikipedia (Call Stack)

Met wat chance is er wel iemand op dit forum die de uitleg hier wilt doen :)
To Woef or not to Woef, that is the question!

WINAK Scriptor 2006-2007
WINAK Vice-Praeses 2007-2008
WINAK Praeses 2008-2009
WINAK Cantor 2009-2010
... en kortom: Eeuwig WINAKer 8)

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#3 » Thu Jan 04, 2007 12:12 am

Actual Call Basics
- Push actuele parameters
- Push PC
- Push BP
- Copy SP to BP
- Allocate local space

Return Basics
- Copy BP to SP
- Pop old BP to BP
- Pop Returnaddress to PC
- Pop parameter space
Dit is wat je zeker moet begrijpen.
Bij een functie oproep zal vanalles op de stack gezet worden. Bij het returnen van de functie, zal alles van de stack gehaald worden, zodat je terug op het vorige niveau zit.

Bij een oproep zal je dus eerst alle actuele parameters pushen. Hierdoor zal de functie die opgeroepen wordt, aan de waarden van de actuele parameters kunnen raken.
Als er by reference wordt doorgegeven zal er een pointer op de stack gezet worden in plaats van een kopie van de waarde.
Na deze actuele parameters wordt de PC (Program Counter) op de stack gepushed. Dit is nodig om bij het returnen te weten waar je zat.
Ook de huidige BP (Base Pointer) wordt op de stack gezet. Dit om te zien waar het vorige niveau staat op de stack. (Dit zorgt voor oneigenlijk stackpeecking omdat je dan niet meer enkel push/pop doet). Door deze BP kan je dus naar hogere niveau's springen en dus globale variabelen steeds blijven zien.
Dan wordt de SP (Stack Pointer) gekopieerd naar de BP. Om het nieuwe niveau aan te duiden.
En dan worden alle lokale variabelen ook op de stack geplaatst. Dit omdat je anders bij een functie oproep in deze functie, de lokale variabelen niet zou kunnen zien.


Bij het terugkeren van de functie wordt dit alles natuurlijk omgekeerd, en terug naar voor de functie oproep hersteld.
Je haalt lokale variablen van de stack aangezien je die niet meer nodig hebt.
Je hersteld BP naar waarde voor oproep, hetzelfde voor SP.
En je haalt alle parameters die op de stack gepushed werden om de functie oproep tot stand te brengen, er terug af.



Je kreeg zo'n oefeningen blad daarbij. (Wij kregen dat toch vorig jaar)
Je moet dat eens goed bezien, met wat hier staat in het achterhoofd. Zie dat je alles wat daar gebeurd, goed begrijpt. En voor de rest staat alles wat je moet weten wel in de cursus.

User avatar
Nick
Prosenior
Posts: 1850
Contact:

Post#4 » Thu Jan 04, 2007 12:19 am

Norfolk wrote: Je kreeg zo'n oefeningen blad daarbij. (Wij kregen dat toch vorig jaar)
Info - Is voor de 1ste BACers ook beschikbaar gemaakt via blackboard
To Woef or not to Woef, that is the question!

WINAK Scriptor 2006-2007
WINAK Vice-Praeses 2007-2008
WINAK Praeses 2008-2009
WINAK Cantor 2009-2010
... en kortom: Eeuwig WINAKer 8)

User avatar
zarry
Posts: 212

Post#5 » Thu Jan 04, 2007 12:32 am

Norfolk wrote:
Actual Call Basics
- Push actuele parameters
- Push PC
- Push BP
- Copy SP to BP
- Allocate local space

Return Basics
- Copy BP to SP
- Pop old BP to BP
- Pop Returnaddress to PC
- Pop parameter space
Dit is wat je zeker moet begrijpen.
Bij een functie oproep zal vanalles op de stack gezet worden. Bij het returnen van de functie, zal alles van de stack gehaald worden, zodat je terug op het vorige niveau zit.

Bij een oproep zal je dus eerst alle actuele parameters pushen. Hierdoor zal de functie die opgeroepen wordt, aan de waarden van de actuele parameters kunnen raken.
Als er by reference wordt doorgegeven zal er een pointer op de stack gezet worden in plaats van een kopie van de waarde.
Na deze actuele parameters wordt de PC (Program Counter) op de stack gepushed. Dit is nodig om bij het returnen te weten waar je zat.
Ook de huidige BP (Base Pointer) wordt op de stack gezet. Dit om te zien waar het vorige niveau staat op de stack. (Dit zorgt voor oneigenlijk stackpeecking omdat je dan niet meer enkel push/pop doet). Door deze BP kan je dus naar hogere niveau's springen en dus globale variabelen steeds blijven zien.
Dan wordt de SP (Stack Pointer) gekopieerd naar de BP. Om het nieuwe niveau aan te duiden.
En dan worden alle lokale variabelen ook op de stack geplaatst. Dit omdat je anders bij een functie oproep in deze functie, de lokale variabelen niet zou kunnen zien.


Bij het terugkeren van de functie wordt dit alles natuurlijk omgekeerd, en terug naar voor de functie oproep hersteld.
Je haalt lokale variablen van de stack aangezien je die niet meer nodig hebt.
Je hersteld BP naar waarde voor oproep, hetzelfde voor SP.
En je haalt alle parameters die op de stack gepushed werden om de functie oproep tot stand te brengen, er terug af.



Je kreeg zo'n oefeningen blad daarbij. (Wij kregen dat toch vorig jaar)
Je moet dat eens goed bezien, met wat hier staat in het achterhoofd. Zie dat je alles wat daar gebeurd, goed begrijpt. En voor de rest staat alles wat je moet weten wel in de cursus.
Nen dikken mercie voor al die moeite :lol: en ja da blad en die module kheb die info uit proberen te vissen maar da lukte ni al te goe maar nu komt da wel in orde! En de info dak von op google was zo 1000 jaar lang :D dermee dak et ff vroeg :) wiki was ik -schaam op mij- vergeten te checke ma normaal doe google da wel als er iets goed van te vinde is ;)
Jie
Ik spreek Zwarryzwaniaans en jij?

User avatar
zarry
Posts: 212

Post#6 » Thu Jan 04, 2007 12:37 am

ik heb gewoon dezelfde quote als u ma dan woef = zwan :) dammit, kmoe nen andere hebbe :D
Ik spreek Zwarryzwaniaans en jij?

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#7 » Thu Jan 04, 2007 12:43 am

zarry wrote:ik heb gewoon dezelfde quote als u ma dan woef = zwan :) dammit, kmoe nen andere hebbe :D
lol wtf?

anyway, graag gedaan :)

User avatar
Nick
Prosenior
Posts: 1850
Contact:

Post#8 » Thu Jan 04, 2007 12:51 am

zarry wrote:ik heb gewoon dezelfde quote als u ma dan woef = zwan :) dammit, kmoe nen andere hebbe :D
yea wtf? :D
you lost me here.

en ja, wikipedia kent precies enkel "Call Stack", wat blijkbaar synoniem is aan run-time stack
To Woef or not to Woef, that is the question!

WINAK Scriptor 2006-2007
WINAK Vice-Praeses 2007-2008
WINAK Praeses 2008-2009
WINAK Cantor 2009-2010
... en kortom: Eeuwig WINAKer 8)

User avatar
zarry
Posts: 212

Post#9 » Thu Jan 04, 2007 1:45 am

To Woef or not to Woef
To Zwan Or Not To Zwan.. :)
Ma er sta nu iet anders e ;)

Enja ik wist da ni van die call :) Jiee
Ik spreek Zwarryzwaniaans en jij?

User avatar
cG`
Posts: 75

Post#10 » Thu Jan 04, 2007 1:55 am

barry tamzak :p

*edit* me = carlo dus :D

User avatar
zarry
Posts: 212

Post#11 » Thu Jan 04, 2007 2:48 am

cG` wrote:barry tamzak :p

*edit* me = carlo dus :D
Ja da is
Ik spreek Zwarryzwaniaans en jij?

User avatar
zarry
Posts: 212

Post#12 » Thu Jan 04, 2007 4:05 am

*vreugdedans* ik snap het volledig merci voor de hulp e :D wickaaaah! thcikci tschiki paaaauuuuw wicked-original! Eigenlijk is da helemaal ni zo moelek e.. Maar toch :)
Ik spreek Zwarryzwaniaans en jij?

Teun
Posts: 216

Post#13 » Sun Jan 07, 2007 10:49 am

Hoe worden de returnwaardes bij functieprocedures dan doorgegeven? Logisch zou zijn op dezelfde manier als bijvoorbeeld variabele parameters?

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#14 » Sun Jan 07, 2007 10:53 am

Teun wrote:Hoe worden de returnwaardes bij functieprocedures dan doorgegeven? Logisch zou zijn op dezelfde manier als bijvoorbeeld variabele parameters?
Het hele object wordt op de stack gezet. Dus als het een integer is, dan wordt er de waarde van de integer op de stack gezet. Dus geen pointer zoals bij variabele parameters.

Teun
Posts: 216

Post#15 » Sun Jan 07, 2007 11:41 am

Ik bedoel bij het aflopen van een procedure.

Stel

PROCEDUE Doeietsnuttigs(VAR par1, par2):INTEGER;

Hoe de par1 en 2 doorgegeven worden snap ik, maar hoe wordt de INTEGER dan teruggeven naar de procedure die Doeietsnuttigs oproept?

Wordt er bij de oproepprocedure al een variabele'x' aangemaakt die de waarde moet krijgen van de return-INTEGER?

En wordt er dan bij het oproepen van doeietsnuttigs een pointer naar die waarde'x' meegegeven, zodat Doeietsuttigs 'x' kan overschrijven?

Dat lijkt me een zinnige oplossing?

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 5 guests

cron