Run-Time Environments: COP5621 Compiler Construction

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 16

1

Run-Time Environments
Chapter 7

COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007-2009

Procedure Activation and Lifetime


A procedure is activated when called The lifetime of an activation of a procedure is the sequence of steps between the first and last steps in the execution of the procedure body A procedure is recursive if a new activation can begin before an earlier activation of the same procedure has ended

program sort(input, output) var a : array [0..10] of integer; procedure readarray; var i : integer; begin for i := 1 to 9 do read(a[i]) end; function partition(y, z : integer) : integer var i, j, x, v : integer; begin end procedure quicksort(m, n : integer); var i : integer; begin if (n > m) then begin i := partition(m, n); quicksort(m, i - 1); quicksort(i + 1, n) end end; begin a[0] := -9999; a[10] := 9999; readarray; quicksort(1, 9) end.

Procedure Activations: Example


Activations:
begin sort enter readarray leave readarray enter quicksort(1,9) enter partition(1,9) leave partition(1,9) enter quicksort(1,3) leave quicksort(1,3) enter quicksort(5,9) leave quicksort(5,9) leave quicksort(1,9) end sort.

Activation Trees: Example


s

r
p(1,9) p(1,3)

q(1,9) q(1,3) q(1,0) q(2,3) p(5,9) q(5,9) q(5,5) q(7,9) p(7,9) q(7,7) q(9,9)

p(2,3) q(2,1) q(3,3)

Activation tree for the sort program Note: also referred to as the dynamic call graph

Control Stack
Activation tree:
s

Control stack:
s q(1,9)

Activations:
begin sort enter readarray leave readarray enter quicksort(1,9) enter partition(1,9) leave partition(1,9) enter quicksort(1,3) enter partition(1,3) leave partition(1,3) enter quicksort(1,0) leave quicksort(1,0) enter quicksort(2,3)

r
p(1,9) p(1,3)

q(1,9) q(1,3) q(1,0) q(2,3)

q(1,3)
q(2,3)

Scope Rules
Environment determines name-to-object bindings: which objects are in scope?
program prg; var y : real; function x(a : real) : real; begin end; procedure p; var x : integer; begin x := 1; end; begin y := x(0.0); end.

Variable x locally declared in p

A function x

Mapping Names to Values


environment state

name

storage

value

var i; i := 0; i := i + 1;

Mapping Names to Values


At compile time environment At run time state

name

storage

value

var i; i := 0; i := i + 1;

Static and Dynamic Notions of Bindings

Static Notion Definition of a procedure Declaration of a name Scope of a declaration

Dynamic Notion Activations of the procedure Bindings of the name Lifetime of a binding

10

Stack Allocation
Activation records (subroutine frames) on the runtime stack hold the state of a subroutine Calling sequences are code statements to create activations records on the stack and enter data in them
Callers calling sequence enters actual arguments, control link, access link, and saved machine state Callees calling sequence initializes local data Callees return sequence enters return value Callers return sequence removes activation record

11

Activation Records (Subroutine Frames)


fp (frame pointer)

Returned value
Actual parameters Callers responsibility to initialize

Optional control link


Optional access link Save machine status

Local data
Temporaries

Callees responsibility to initialize

12

Control Links
The control link is the old value of the fp
Callers activation record

fp sp
Control link
Callees activation record

Stack growth

13

Scope with Nested Procedures


program sort(input, output) var a : array [0..10] of integer; x : integer; procedure readarray; var i : integer; begin end; procedure exchange(i, j : integer); begin x := a[i]; a[i] := a[j]; a[j] := x end; procedure quicksort(m, n : integer); var k, v : integer; function partition(y, z : integer) : integer var i, j : integer; begin exchange(i, j) end begin if (n > m) then begin i := partition(m, n); quicksort(m, i - 1); quicksort(i + 1, n) end end; begin quicksort(1, 9) end.

14

Access Links (Static Links)


s a x q(1,9) access k v s a x q(1,9) access k v q(1,3) access k v s a x q(1,9) access k v s a x q(1,9) access k v q(1,3) access k v p(1,3) access i j e(1,3) access

q(1,3) access k v
p(1,3) access i j

The access link points to the activation record of the static parent procedure: s is parent of r, e, and q q is parent of p

15

Accessing Nonlocal Data


To implement access to nonlocal data a in procedure p, the compiler generates code to traverse np - na access links to reach the activation record where a resides
np is the nesting depth of procedure p na is the nesting depth of the procedure containing a

16

Parameter Passing Modes


Call-by-value: evaluate actual parameters and enter r-values in activation record Call-by-reference: enter pointer to the storage of the actual parameter Copy-restore (aka value-result): evaluate actual parameters and enter r-values, after the call copy r-values of formal parameters into actuals Call-by-name: use a form of in-line code expansion (thunk) to evaluate parameters

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy