




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12S.PO.P语义分析、生成中间代码语义分析、生成中间代码生成目标程序生成目标程序代码优化代码优化语法分析程序语法分析程序词法分析程序词法分析程序错错误误处处理理符符号号表表管管理理编译程序在编译阶段要为源程序中出现的变量、常量等组编译程序在编译阶段要为源程序中出现的变量、常量等组织好在织好在运行阶段的存储空间运行阶段的存储空间将这种组织形式通过生成的将这种组织形式通过生成的目标代码目标代码体现出来体现出来为运行阶段实现存储为运行阶段实现存储奠定基础奠定基础3教学目标教学目标 要求明确静态存储分配和动态存储分配的要求明确静态存储分配和动态存储分配的含义含义 了解栈式动态存储分配和活动记录的含
2、义了解栈式动态存储分配和活动记录的含义及组成及组成 了解堆式动态存储分配的分配方式和管理了解堆式动态存储分配的分配方式和管理技术技术48.1 8.1 程序运行时的存储组织程序运行时的存储组织8.2 8.2 静态存储分配静态存储分配8.3 8.3 栈式动态存储分配栈式动态存储分配8.4 8.4 堆式动态存储分配堆式动态存储分配教学内容教学内容5运行时存储空间的划分运行时存储空间的划分代码空间代码空间数据空间数据空间目标代码区目标代码区静态数据区静态数据区运行栈区运行栈区 运行堆区运行堆区67 临时变量临时变量 内情向量内情向量 形式单元形式单元 动态链动态链 返回地址返回地址 静态链静态链 局部
3、变量局部变量 连接连接数据区数据区 局部局部数据区数据区 SP TOP891) 1) 隐式参数隐式参数主要用于和主调模块的通讯,在主要用于和主调模块的通讯,在一般情况下这个参数可以是主调过程的返回一般情况下这个参数可以是主调过程的返回地址,或在不能利用寄存器返回函数值时传地址,或在不能利用寄存器返回函数值时传回函数返回值。这些信息不会在程序中明显回函数返回值。这些信息不会在程序中明显地出现,所以称为隐式参数。地出现,所以称为隐式参数。2) 2) 形式参数形式参数部分存放相应实在参数的地址或部分存放相应实在参数的地址或值。值。3) 3) 程序变量部分程序变量部分将作为简单变量、数组、记将作为简单
4、变量、数组、记录以及编译程序所产生的临时变量的存储空录以及编译程序所产生的临时变量的存储空间。间。101112下面我们通过一段下面我们通过一段C C程序的运行来说明运行栈的变化情况。设有程序的运行来说明运行栈的变化情况。设有C C程序如下:程序如下:real x; 块块1int m1(int ind) 块块2 int x; x=m2(ind+1);int m2(int j) 块块3 int f10; 块块4 bool test1; main()块块5 int x; x=2; printf(%dn,m1(x/5); (a) (b) (c) (d) (e)131 1、 参数区参数区 参数区保存的内
5、容包括:1) 隐式参数隐式参数:隐式参数常包含下列几项: 返回地址:主调程序中调用语句的下一条可执行语句的地址。 指向前一个活动记录起始位置的指针:该基地址指针存放该模块的主调模块的活动记录的基地址,用于确保控制返回主调过程时,能使运行环境恢复到调用前的格局。 函数返回值:有的隐式参数区包含此项,有的不包括,还有更好的处理返回值的方法 。2) 显式参数显式参数:显式参数区是形式参数的通讯区。 形式参数的传递有传值、传地址、传名等方法。有些语言如PASCAL语言即可传值、也可传地址。C语言采用的是传值的方式,这种参数传递方法,实在参数的值将赋给形式参数。当程序运行进入一个程序块时,就要在运行栈中
6、为当程序运行进入一个程序块时,就要在运行栈中为此程序块添加一个活动记录。活动记录中除了存储此程序块添加一个活动记录。活动记录中除了存储局部变量外,还包括一个参数区和一个局部变量外,还包括一个参数区和一个displaydisplay区。区。图图8.38.3表示了一个典型的活动记录的概貌。表示了一个典型的活动记录的概貌。 14210例如,令过程例如,令过程R R的外层为的外层为Q Q,Q Q的外层为的外层为P P,则过程,则过程R R运行运行时时displaydisplay表的内容应为:表的内容应为:15图图8.48.4给出了图给出了图8.2(e)8.2(e)的运行的运行栈中各活动记录的内容。栈中
7、各活动记录的内容。块块4 4的活动记录如下:的活动记录如下:DISPLAYDISPLAY区:区:指针指针d1d1和和d2d2,分,分别指向全局变量区的地址别指向全局变量区的地址Abp0Abp0和和Abp3Abp3。隐式参数区:隐式参数区:有两个参数,第有两个参数,第一个是返回地址,因块一个是返回地址,因块4 4不是不是一个独立的函数,是一嵌套的一个独立的函数,是一嵌套的块程序,所以,没有返回地址,块程序,所以,没有返回地址,同样也没有形参,第同样也没有形参,第2 2个参数个参数Abp3Abp3表示在运行栈中,前一个表示在运行栈中,前一个活动记录是开始地址为活动记录是开始地址为Abp3Abp3的
8、的m2m2活动记录。活动记录。局部数据区:局部数据区:f f和和testtest。 块块4活动记录活动记录abp4abp4 m2活动记录活动记录abp3 m1活动记录活动记录abp2 main活动记录活动记录abp1abp016int fact()int fact() staticstatic int i=5; int i=5; if(i=0) return 1; if(i=0) return 1; else else i-; i-; return( return( (i+1)(i+1)* *fact()fact() ); ); /第第6 6行行 main()main() printf(fac
9、tor of 5!=%dn,fact(); printf(factor of 5!=%dn,fact(); 171819(a)程序运行初期:程序运行初期: (b)运行一段时间后:运行一段时间后:当有新请求分配内存时,有两种当有新请求分配内存时,有两种策略分配策略分配空间:空间: 系统继续从高地址的空闲块中进行分配,而不查看已分配给系统继续从高地址的空闲块中进行分配,而不查看已分配给用户的内存区是否已空闲,直到分配无法进行用户的内存区是否已空闲,直到分配无法进行(即剩余的空闲块即剩余的空闲块不能满足分配的请求不能满足分配的请求)时,系统才去回收所有用户不再使用的空时,系统才去回收所有用户不再使用的空闲块。闲块。1) 用户使用一旦结束,便将所占内存区释放成空闲块。同时,用户使用一旦结束,便将所占内存区释放成空闲块。同时,每当新的用户请求分配内存时,系统需要巡视整个内存中所有每当新的用户请求分配内存时,系统需要巡视整个内存中所有空闲块,并从中找出一个空闲块,并从中找出一个“合适合适”的空闲
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东冬日团建活动方案
- 巾帼系列活动方案
- 屈臣氏公司活动策划方案
- 工地读书活动方案
- 小学英语小讲座活动方案
- 工厂迎新活动方案
- 师生书写活动方案
- 居然之家过七夕活动方案
- 小学采摘活动方案
- 小朋友们轮滑活动方案
- 2025至2030年中国高纯氧化镁行业市场运行格局及前景战略分析报告
- 妇女保健服务技术规范与诊疗常规
- 高级记者考试试题及答案
- 2025国家开放大学《高级财务会计》期末机考题库
- R1快开门式压力容器操作上岗证考试题及答案
- 贵州毕节中考试题及答案
- 道路人行天桥加装电梯导则(试行)
- 中国废旧轮胎橡胶粉项目投资计划书
- 道路养管协议书
- 2025年河北省专技人员公需课《人工智能时代的机遇与挑战-预训练大模型与生成式AI》答案
- 2025-2030母婴用品产业市场现状供需分析及重点企业投资评估规划分析研究报告
评论
0/150
提交评论