1、第七章 运行时环境学习内容m源语言语义m存储组织m存储分配策略m对非局部名字的访问m参数传递m符号表m动态内存分配7.1 源语言相关问题m 7.1.1 过程(函数), procedure 静态活动, activation 动态m 过程定义, procedure definitionm 过程名, procedure namem 过程体, procedure bodym 函数, functionm 调用, callm 形式参数, formal parametersm 实际参数, actual parametersPascal源码示例program sort(input, output);var a
2、 : array 0.10 of integer;procedure readarray;var i : integer;beginfor i := 1 to 9 do read(ai);end;function partition(y, z : integer) : integer;var i, j, x, v : integer;begin end;过程定义过程名形式参数函数定义过程体Pascal源码示例(续)procedure quicksort(m, n : integer);var i : integer;beginif (n m) then begini := partition(
3、m, n);quicksort(m, i - 1);quicksort(i + 1, n)endend;调用 实际参数Pascal源码示例(续)begina0 := -9999; a10 := 9999;readarray;quicksort(1, 9);end.7.1.2 活动树( activation tree)m 控制流q 顺序性:程序的执行 一组操作步骤序列,在每个步骤,控制流开始于程序的特定位置q 过程的执行:起始于过程体开始,最终控制权返回到过程调用点之后 活动树 表示m 活动 :一次 执行 ( execution)m 过程 P的 生存期 , lifetime:q 过程体执行的第一
4、步操作到最后一步操作的操作序列,包括 P调用其他过程的时间过程的活动m p调用 q,控制最终会返回 p 每次控制流从 p转移到 q,总会返回到 pm 过程的生命期或者不重叠、或者嵌套 b 在 a退出之前进入,则必在 a之前退出q 利用输出语句演示嵌套execution begin enter readarray leave quicksort(1, 3)leave readarray enter quicksort(5, 9)enter quicksort(1, 9) enter partition(1, 9) leave quicksort(5, 9)leave partition(1, 9) leave quicksort(1, 9)enter quicksort(1, 3) execution terminated.递归m 过程 p的某个活动尚未结束,可以开始它的一个新的活动m 间接递归m 活动树1. 结点 过程的活动2. 根结点 主程序的活动3. a是 b的父结点 控制流从 a到 b4. a在 b的左边 a的生存期在 b之前例 7.1