- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实践及应用PPT教学课件-第6章 运行时存储分配
运行时存储空间的组织
第六章
本章要求
主要内容:程序的静态文本与它运行时的活动之间的关系,源程序运行时各种对象的存储空间主要有三种分配方式:静态存储分配、栈式存储分配和堆式存储分配
重点掌握:源程序运行时的活动,参数传递方式,程序中名字的作用域,局部数据区的内容,存储空间的分配方式
6.1 程序执行时的活动
静态和动态的联系
名字和数据对象
数据对象的动态表示
名字的作用域
数据对象的存储分配
过程和活动
参数处理
运行时支撑程序包
过程相关的几个概念
过程定义是一个声明,它的最简单的形式是把一个标识符(过程的名字)和一段语句联系起来。
当过程名出现在可执行语句中时,则称过程在该点被调用
出现在过程定义中的标识符称为形式参数(或形参)
出现在过程调用中的标识符或常数称为实在参数(或实参)
一个过程的一次执行指的是从过程体的起点开始,最后退出该过程,将控制返回到该过程被调用之后的位置。
一个过程的活动指的是该过程的一次执行。就是说,每次执行一个过程体就产生该过程的一个活动。
从执行该过程体的第一步操作到最后一步操作之间的操作序列所花的时间称为该过程的一个活动的生存期
名字的作用域
语言中名字的声明是把信息与名字联系起来的语法结构。
区分同名程序声明:最接近的嵌套规则
int a , b;
int *p;
int foo( int a )
{
int b, c;
char *p;
p = malloc( sizeof( char ) );
b = foo( 1 ); …
}
作用域:一个声明起作用的程序部分称为该声明的作用域
局部和非局部:过程中名字的出现,如果是在该过程的一个声明的作用域内,则这个出现称为局部于该过程
参数的传递
传地址(常用):把实在参数的地址传递给相应的形式参数
传值(常用):调用段把实在参数的值传给被调用段。被调用段把实参值抄进形式单元中,再使用。
得结果:形式参数对应有两个单元,第一个单元放实参的地址,第二个单元放实参的值。对形式参数的任何引用或赋值都看成是对第二个单元的直接访问,过程返回前必须把第二个单元的内容存放到第一个单元所指的那个实参单元之中
传名:(ALGOL60 )过程调用相当于把被调过程的过程体抄到调用出现的位置,把其中任一出现的形式参数都替换成相应的实在参数(文字替换)
名字的绑定
静态概念
动态概念
过程的定义
名字的声明
声明的作用域
过程的活动
名字的绑定
绑定的生命期
程序中声明的名字和动态数据对象的关系
数据对象是保存值的存储单元
一个名字可能代表不同的数据对象
环境:表示将名字映射到存储单元(即名字的左值)的函数
状态:表示将存储单元映射到它所保存的值(即名字的右值)的函数
赋值操作只改变状态,但不改变环境
结合:如果环境把存储单元s联系到名字x,则称x绑定到s,这个联系本身称为x的绑定
名字绑定要考虑的问题
过程是否递归
当控制从过程的活动返回时,局部名字的值是否要保留
过程能否引用非局部的名字
过程调用时参数是如何传递的
过程是否可以作为参数被传递
过程能否作为结果值返回
存储区能否在程序控制下动态地分配
存储区是否必须显式地释放
6.2 运行时内存的划分
程序运行时如何使用内存:
目标代码的存放
目标代码可以存放在静态确定的区域,其长度在编译时即可确定
数据对象
可静态分配的数据对象,其地址可以编译到目标代码中
动态分配
控制栈:记录过程活动
堆:可以存放动态分配的数据等,但开销要比栈大
过程1的目标代码
代码区
过程2的目标代码
……
过程n的目标代码
全局变量和静态变量
静态数据
栈
自由空间
堆
动态数据
局部数据区的内容
活动记录:过程的一次执行所需要的信息用一块连续的存储区来管理,这块存储区叫做活动记录或帧,当调用一个过程时,就要为其建立一个活动记录
并不是所有的语言或编译器都是如此
寄存器的使用
活动记录的操作:
过程被调用时入栈
过程返回时出栈
活动记录的各个域的作用
临时数据:临时变量的存储等
局部数据:局部于过程执行的数据
机器状态:保存过程调用前的机器状态信息(返回地址)
可选的访问链:用于非局部数据的访问
可选的控制链:指向调用者的活动记录
实在参数:参数个数较少时,可以考虑用寄存器传递,效率高;参数多时用用这个域传递
返回值:用于存放被调用过程返回给调用过程的值,也可以用寄存器返回(效率高,但形式受限制)
6.3 存储分配策略
静态存储分配
栈式存储分配
堆式存储分配
静态存储分配策略
名字的绑定:
编译时实现,不需要运行时支撑程序
名字和存储的绑定是固定的
允许名字的值在过程停止活动后保持
根据名字的类型,编译器可以在静态时刻确定该名字所需的存储空间,效率
局限:
数据对象的长度和
您可能关注的文档
- 电路电子课件教案邱关源版 第3章 电阻电路的一般分析.ppt
- 电路电子课件教案邱关源版 第12章 三相电路.ppt
- 百易时代技术部员工培训.ppt
- 电路电子课件教案邱关源版 第6章 储能元件.ppt
- 百金商店中国电信零售连锁店项目(摘要).ppt
- 白酒(国窖)品牌整合传播方案.ppt
- 益高担保软件演示9298425633.ppt
- 知识管理培训-BenQ.ppt
- 硪蕞歖歡嘚图片.ppt
- 硕士学位论文答辩 高效自动化脱硫技术研究与应用.ppt
- 统编版语文一年级下册课件10.《彩虹》.pptx
- 统编版语文二年级下册课件4.《邓小平爷爷植树》.pptx
- 外研版 八年级下册 Module 6 Hobbies Unit 1 Do you collect anything课件(共37张PPT).pptx
- 外研版(2024)新教材小学三年级英语下册Unit 6 第3课时Fuel up优质课件.pptx
- 图形的相似课件人教版数学九年级下学期.pptx
- 统编版语文三年级下册15.《小虾》.pptx
- 统编部编版四年级道德与法治下册第5课《合理消费》优质PPT课件.pptx
- 统计调查课件~人教版数学七年级下册.pptx
- 统编版语文四年级下册第15课《白鹅》课件.pptx
- 外研版(2024)新教材小学三年级英语下册Unit 6 第4课时Hit it big优质课件.pptx
文档评论(0)