|
图 10.7过程定义不嵌套的程序结构 |
|
program main; //主程序头
全局变量或数组的说明;
proc R; //过程R的头
… //过程R的体
end (R); //过程R的尾
proc Q; //过程Q的头
… //过程Q的体
end (Q); //过程Q的尾
主程序执行语句 //主程序体
end.(main) //主程序尾 |
 |
这种情况下,采用栈式动态分配策略,即,运行时,每当进入一个过程,则为该过程分配一段存储区,当一个过程工作完毕返回时,它所占用的存储区可释放。程序运行时的存储空间(栈)中在某一时刻可能会包含某个过程的几个活动记录(某个过程递归调用的情况);另外,同样的一个存储位置,在不同运行时刻可能分配给不同的数据对象。例如图10.7的程序结构中,若主程序调用了过程Q,Q又调用了R,在R进入运行后的存储结构如图10.8(a)所示。若主程序调用了过程Q,Q递归调用自己,在Q过程第二次进入运行后的存储结构如图10.8(b)所示。若主程序先调用过程Q,然后主程序接着调用R,且Q过程不调用Q和R,这时Q和R进入运行后的存储结构,先后分别如图10.8(c)和10.8(d)所示。
图 10.8栈式存储分配 |
|
常常使用两个指针指示栈最顶端的数据区,一个称为SP,一个称为TOP。SP总是指向现行过程活动记录的起点,TOP则始终指向已占用的栈顶单元。 |