Semantic Analysis & Runtime Environment
语法分析 知识点:
运行环境 知识点:
活动记录、控制栈 栈式存储分配 非局部名字的访问 参数传递方式 7.1 程序运行时的存储组织 7.1.1 程序运行空间的划分 活动与过程的概念 过程:静态概念 活动:一次过程的每次执行,是动态概念 两者可以为1:1或1:m的关系,递归过程中可能一若干个活动活着。
活动的生存期 活动的生存期要么是不重叠的,要么是嵌套的(区别于进程的地方!活动不可以并发执行!)
对于一个程序,它会向操作系统申请一块内存空间: 活动记录会在控制栈中根据栈式存储分配策略来实现。 7.1.2 活动记录与控制栈 控制栈 局部数据的安排 编址限制的影响(padding) 7.1.3 名字的作用域及名字绑定 名字的作用域: 最近嵌套原则
名字绑定: note: 对于递归程序中定义的名字,即使是同一个名字也可能映射到不同的存储空间。
左值:存储空间的地址 右值:存储空间的内容 7.2 存储分配策略 7.2.1 静态存储分配 条件:源程序中声明的各种数据对象所需存储空间的大小在编译时都可以确定。 存储分配:编译时,为他们分配固定的存储空间。 地址绑定:程序装入内存时进行。 运行期间:名字的左值保持不变 不允许递归调用和建立动态数据结构
7.2.2 栈式存储分配(重点) 递归调用:同一个过程在不同存储位置出现。
调用序列 返回序列 其中top_sp = top_ep' - C1 - C2; P是通过top_sp找到返回值并放入局部数据域中。