九运行时存储空间的组织.PPT
文本预览下载声明
中国科大 第九章 运行时存储空间的组织 本章内容 讨论一个活动记录中的数据安排 程序执行过程中,所有活动记录的组织方式 存储器的组织与存储分配的策略 9.1 目标程序运行时的活动 9.1.1 过程的活动 活动 过程的一次执行称为过程的一次活动。 活动记录 过程的活动需要可执行代码和存放所需信息 的存储空间,后者称为活动记录(Activation Record) 活动的生存期 过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作序,包括执行P时调用其它过程花费的时间。 9.1 目标程序运行时的活动 9.1.2 参数传递 传地址(传引用)(call by reference) 把实在参数的地址传递给相应的形式参数。 传值(call by value) 把实在参数的值计算出来并存放在一个被调用段可以拿得到的地方。被调用段开始工作时,首先把这些值抄进自己的形式单元中,然后就好像使用局部名一样使用这些形式单元。 9.1 目标程序运行时的活动 传名(call by name):也称为“换名” 过程调用的作用相当于把被调用段的过程体抄到调用出现的位置,把其中任一出现的形式参数都替换成相应的实在参数(文字替换)。 9.2 运行时存储器的划分 9.2.1 运行时存储器的划分 编译程序为了使它编译后得到的目标程序能够运行,要分配逻辑存储空间。 程序运行时操作系统为进程分配物理存储,并完成逻辑-物理空间的映射。 对逻辑空间应该进行划分,其中包括生成的目标代码、数据对象和跟踪过程活动的控制栈(运行时成为进程的code,data和stack区)。目标代码的大小在编译时可以确定,所以编译程序可以把它放在一个静态确定的区域。 运行时存储器的划分: 地址空间共多大? 9.2.2 活动记录(Activation Record) 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这样的一个连续存储块称为活动记录。 活动记录一般包含如下内容: 临时单元 内情向量 局部变量 形式单元 静态链 动态链 返回地址 9.2.3 存储分配策略 1 静态分配 静态分配策略在编译时对所有数据对象分配固定的存储单元,且在运行时始终保持不变。 2 动态分配 栈式动态分配策略在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦退出,它所占空间就予以释放。 堆式动态分配策略在运行时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者从堆中分给一块,凡释放者退回给堆。 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 过程能否作为结果值传递 9.2 运行时存储器的划分 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 过程能否作为结果值传递 存储块能否在程序控制下动态地分配 9.3 静态存储分配 静态分配 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。 9.3 静态存储分配 静态分配 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。 绑定的生存期是程序的整个运行时间。 9.3 静态存储分配 静态分配 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。 绑定的生存期是程序的整个运行时间。 控制再次进入该过程时,局部变量的值和控制上一次离开时的一样。 9.3 静态存储分配 静态分配 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。
显示全部