第十章目标程序运行时的存储组织.ppt_第1页
第十章目标程序运行时的存储组织.ppt_第2页
第十章目标程序运行时的存储组织.ppt_第3页
第十章目标程序运行时的存储组织.ppt_第4页
第十章目标程序运行时的存储组织.ppt_第5页
免费预览已结束,剩余19页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第10章 目标程序运行时的存储组织,学习目标: 掌握:参数传递的几种方式 理解:静态存储分配、栈式动态存储分配、堆式动态存储分配的基本思想,目标程序运行时的存储组织 存储分配是在运行阶段进行的; 但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来; 运行阶段,随着目标代码的运行,数据的存储组织形式便得以实现。,目标程序运行时的存储组织要解决的问题: 把静态的源程序与程序运行时的动态活动联系起来,即运行中的程序信息是如何进行存储和访问的。 在程序执行过程中,程序中数据的存取是通过对应的存储单元来进行的 存储组织就是要在编译阶段为源程序中出现的用户定义的变量与

2、常量、临时工作单元、过程或函数调用时需要的连接单元与返回地址等分配其在运行阶段的存储空间,10.1 运行时的存储空间结构 10.2运行时的存储空间分配 10.3参数传递,10.1 运行时的存储空间结构,当程序运行时,存储区的内容包括: 目标代码 目标代码的大小在编译时可以静态确定,因此可以把它放在静态确定的区域; 目标代码运行时的数据空间 数据空间包括:用户定义的各种类型的数据对象;临时工作单元;输入/输出缓冲区等 数据空间有三种组织形式:静态数据区、栈区和堆区,目标代码区(code); 静态数据区(static data):用于存放编译时能确定所占用空间的数据,如全局变量和静态变量 堆栈区(

3、stack and heap):用于存放编译时不能确定所占用空间的数据,如可变数据以及管理过程活动的控制信息,运行时的存储空间结构如下:,自由空间,10.2 运行时的存储空间分配,影响分配策略的因素: 源语言的结构特点 源语言的数据类型 源语言中决定名字作用域的规则 编译器具体实现时,采用如下三种分配策略之一或三种的混合形式。这三种方式是: 静态存储分配 栈式动态存储分配 堆式动态存储分配,10.2.1 静态存储分配,指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。 由静态存储分配产

4、生的数据区称为静态数据区。 静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言 静态存储分配的特点:简单、易于实现 例:FORTRAN语言,它所有的数据都属于这一类。,例:FORTRAN程序 主程序段 Program CNSUME 子程序段 Character function PRDUCE() ,10.2.2 动态存储分配,指在运行阶段动态地为源程序中的数据对象分配存储位置 实行动态存储分配的语言的特点: 允许递归过程 允许可变数据结构(可变数组或记录等) 允许用户自由申请和释放空间 这种程序在编译时无法确定运行时所需数据空间的大小,需待程序运行时动态确定 有两种动态

5、存储分配方式:栈式(stack)、堆式(heap)。,10.2.3 栈式动态存储分配,在数据空间中开辟一个栈区,每当调用一个过程时,它所需要的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。空间的使用符合先借后还的原则。 特点:先借后还,管理简单,空间使用效率高 栈式动态存储分配适合于PASCAL、C等典型过程式语言。,Program main; 全局变量定义; Procedure R; End(R); Procedure Q; End(Q); 主程序执行体 End.(main),若主程序调用Q,Q递归调用自己,在Q第二次进入运行后的存储结构为:,10.2.4 堆式动态存储分配,在数

6、据空间中开辟一片连续的存储区(通常叫做堆),每当需要时就从这片空间借用一块,不用时再退还。借用与归还未必服从“先借后还”的原则。 堆式动态存储分配适合于用户可以自由申请和归还数据空间的语言,如C+。 特点:适用范围广,容易出现碎片。 如何充分利用空间是个难题。,作为存储分配组织的一个原则,能在编译时完成的存储分配尽量采用静态分配方案,避免目标程序中携带许多用于存储分配的指令,以提高目标代码的效率。,10.3 参数传递,过程(函数)是结构化程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。 当一个过程调用其他过程时,调用与被调用之间的通信或者通过全局量,或者由参数传递。 掌握编译

7、器使用的参数传递的方法很重要,它们直接影响程序运行的结果。,过程定义 procedure SWAP(n, m: real); var j: real; begin j:=n; n:=m; m:=j end;,参数传递的例子:,主程序 i:=5; ki:=6; SWAP(i, ki);过程调用 ,1. 参数,参数 过程定义中的参数称为形式参数,简称形参。 过程调用中的参数称为实在参数,简称实参。 实参可以是变量、常量或较复杂的表达式,应与相应的形参在性质上相容。 参数传递常用的三种途径: 传值 (call by value),也称值调用 传地址 (call by reference),也称引用调

8、用 传名 (call by name),也称“换名”,2. 传值,将实参的值计算出来,然后把它传给被调过程 传值的实现: 1.在被调过程的数据空间中为每个形参开辟一个形式单元(用以存放相应的实参值)。 2.调用过程计算实参的值,并将其值放在对应的形式单元中。 3.被调用过程执行时,每当访问(引用或赋值)形参时都处理成对形式单元的直接访问。 特点: 对形式参数的任何运算不影响调用过程中的实参的值,例 过程定义 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end; 主程序 i:=5; ki:=6; SWAP(i, k

9、i);过程调用,过程调用时,有 (假设i的地址为add_i),执行了语句”j:=n;n:=m;m:=j”后,结果:i=5,k5=6 不变,未交换,3. 传地址,将指向实参存储位置的指针传给被调用过程 传地址的实现: 1.在被调过程的数据空间中为每个形参开辟一个形式单元(用以存放相应实参的地址)。 2.调用过程将实参的地址放在对应的形式单元中。若实参是一个表达式(包括常数),例如a+b或2,先对表达式求值,并将值存入某一位置,然后将该位置的地址放在形式单元中 3.被调用过程执行时,每当访问(引用或赋值)形参时都处理成对形式单元的间接访问。 特点: 对形式参数的运算影响调用过程中的实参的值,例 过

10、程定义 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end; 主程序 i:=5; ki:=6; SWAP(i, ki);过程调用,过程调用时,有 (假设i的地址为add_i),执行了语句”j:=n;n:=m;m:=j”后,结果:i=6,k5=5正确交换,4. 传名,过程调用的作用相当于把被调用段的过程体抄到调用出现的位置,但把其中形式参数名换成相应的实在参数名。 传名的实现: 1.在被调过程的数据空间中为每个形参开辟一个形式单元(用以存放相应实参子程序的入口地址)。 2.为每个实参设置一个计算实参地址和值的子程序(称为参数子程序),并将其入口地址放在对应的形式单元中。 3.被调用过程执行时,每当访问(引用或赋值)形参时就按实参子程序的入口地址调用相应的参数子程序计算出当时实参的值(供引用)或地址(供赋值)。,例 过程定义 procedure SWAP(n, m: real); var j: real; beginj:=n; n:=m; m:=j end;,主程序 i:=5; ki:=6; SWAP(i, ki);过程调用 ,传名的结果: 相当于把SWAP(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论