120 likes | 355 Views
Program Compilation and Execution. Today’s Objectives. Explain why runtime stack needed for C Draw logical division of memory into stack, heap Compare and contrast stack and heap List variables stored in heap; stack; neither Describe 2 different function calling conventions.
E N D
Today’s Objectives • Explain why runtime stack needed for C • Draw logical division of memory into stack, heap • Compare and contrast stack and heap • List variables stored in heap; stack; neither • Describe 2 different function calling conventions
Logical Memory Layout Stack D Y N A M I C Currently not in use Currently not in use Heap Static Space
Dice.c int NUM = 100000; main() { int i, roll, *counts; counts = (int *) malloc (13 * sizeof(int)); for (i = 0; i < 13; i++) counts[i] = 0; for ( i = 0; i < NUM; i++) roll = rand() % 6 + rand() %6 + 2 counts[roll]++; for (i = 2; i < 13; i++) printf(“There were %d rolls of %d\n”, counts[i],i); }
Where Are the Variables? Stack D Y N A M I C i; roll; counts Currently not in use Currently not in use Space for 13 ints – pointed to by counts Heap Num “There were %d rolls of %d\n” Static Space
Runtime Stack Activation record for Hanoi; 1 2 3 1 Activation record for Hanoi; 1 3 2 2 Activation record for Hanoi; 1 2 3 3 Activation record for Hanoi; 1 3 2 4 Activation Record for Main Activation record for main
Support for Function Calls • Call usually simple, but setup not • call printf • what comes before and after call? • Support recursion? • No --- simple, use static space • Yes --- runtime stack of activation record(s) • Return value(s)
Activation Record Information • Parameters • Locals • Compiler Temporaries • Register Save/Restore • Previous Activation Record • Previous Scope • Anything else?
A Function Call Convention • fp and sp defined by assembler • Caller function (in order) • push parameters on stack, in reverse • push fp • fp = sp - 4 • call callee • fp = 0 (fp) • sp = sp – (size of arguments + 4) • Callee function (in order) • sp = sp + size of function • execute function • sp = sp – size of function • return
An Activation Record Next stack location – beyond the stack sp Reg save … Reg save … Reg save … Temps … 8(fp) – local 2 4(fp) – local 1 fp 0(fp) – old fp -4(fp) – parameter 1 -8(fp) – parameter 2 -12(fp) – parameter 3
Function Call Convention (2) • Alpha conventions • Parameters passed in registers, r16 - r24 or d16 - d24 • Return in r0 (or d0) • Registers r1 - r8, d1 - d8 are NOT saved across function call invocations (caller save) • Registers r25 - r31 and d25 - d31 ARE saved across function call invocations (callee save)