Instructieset en assembly
Bij functies die geen andere functies aanroepen (bladfuncties, leaf functions) hoeft ra vaak niet op de stack te worden opgeslagen. Wat is de juiste reden?
- ABladfuncties gebruiken geen ret-instructie
- BDe CPU plaatst het terugkeeradres van een bladfunctie automatisch op de stack
- COmdat ze geen andere functies aanroepen, wordt ra niet overschreven en blijft het terugkeeradres behouden
Antwoord en toelichting tonen
Antwoord: C. Omdat ze geen andere functies aanroepen, wordt ra niet overschreven en blijft het terugkeeradres behouden
ra wordt bij elke jal die een functie aanroept overschreven, dus een functie die andere functies aanroept moet zijn eigen terugkeeradres eerst op de stack opslaan. Een bladfunctie gebruikt geen jal, dus ra blijft intact en kan zonder opslaan met ret terugkeren. Als ook geen callee-saved-registers worden gebruikt, hoeft zelfs geen stackframe te worden gemaakt. De call-instructie van x86 plaatst het terugkeeradres altijd op de stack, wat hier een verschil met RISC-V is.