版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,编译原理,第九章 运行时存储空间组织,2,第九章 运行时存储空间组织,目标程序运行时的活动 运行时存储器的划分 静态存储管理 一个简单栈式存储分配 嵌套过程语言的栈式实现,3,第九章 运行时存储空间组织,目标程序运行时的活动 运行时存储器的划分 静态存储管理 一个简单栈式存储分配 嵌套过程语言的栈式实现,4,9.1 目标程序运行时的活动,以Pascal为例,假定程序由若干个过程组成 过程(procedure)定义 一个过程的活动指的是该过程的一次执行 过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作序,包括执行P时调用其它过程花费的时间 过程可以是递归的,5,
2、(1) program sort(input, output) (2) var a: array0.10 of integer; (3) procedure readarray; (4) var i: integer; (5) begin (6) for i:=1 to 9 do read(ai) (7) end; (8) function partition(y, z:integer):integer; (9) var i:integer; (10) begin . (11) end;,program sort procedure readarray function partition p
3、rocedure quicksort,6,(12) procedure quicksort(m, n:integer); (13) var i:integer; (14) begin (15) if (nm) then begin (16) i:=partition(m, n ); (17) quicksort(m, i-1 ); (18) quicksort(i+1, n ) (19) end; (20) end; (21) begin (22) a0:=-9999; a10:=9999; (23) readarray; (24) quicksort(1, 9 ) (25) end.,pro
4、gram sort procedure readarray function partition procedure quicksort,7,参数传递,过程是模块程序设计的主要手段,同时也是节省程序代码和扩充语言的主要途径 过程定义: procedure add(x,y:integer; var z:integer) begin z:=x+y; end; 过程调用 add(a,b,c);,Alan J. Perlis,To understand a program you must become both the machine and the program.,8,参数传递方式,传地址 得结
5、果 传值 传名,9,参数传递方式传地址,把实在参数的地址传递给相应的形式参数 方法 调用段预先把实在参数的地址传递到被调用段可以拿到的地方 程序控制转入被调用段之后,被调用段首先把实在参数的地址抄进自己相应的形式单元中 过程体对形式参数的引用域赋值被处理成对形式单元的间接访问 PASCAL的变量参数方式,10,procedure swap (var m:integer; var n: integer); var i:integer; begin i:=m; m:=n; n:=i; end,swap(a,b) 把a,b的地址送到已知单元j1和j2中 m:=j1; n:=j2; i:=m; m:=
6、 n; n:=i;,11,参数传递方式得结果,传地址的一种变形 方法 每个形参对应两个形式单元,第一个形式单元存放实参地址,第二个单元存放实参的值 在过程体中对形式参数的任何引用或赋值都看作对它的第二个单元的直接访问 过程完成返回前把第二个单元的内容存放到第一个单元所指的实参单元中 有些Fortran采用这种方式,12,参数传递方式传值,把实在参数的值传递给相应的形式参数 方法 调用段预先把实在参数的值计算出来并放在被调用段可以拿到的地方 被调用段开始工作时,首先把实参的值抄入形式参数相应的单元 被调用段中,象引用局部数据一样引用形式单元 PASCAL的值参数,13,参数传递方式传名,过程调用
7、的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实参 方法 在进入被调用段的之前不对实在参数预先进行计值,而是让过程体中每当使用到相应的形式参数时才逐次对它实行计值(或计算地址) 通常把实在参数处理成一个子程序(称为参数子程序),每当过程体中使用到相应的形式参数时就调用这个子程序,14,PROGRAM EX var A:integer; PROCEDURE P(B:integer) var A:integer; BEGIN A:=0; B:=B+1; A:=A+B; END;,BEGIN A:=2; P(A); write(A); END,15, pr
8、ocedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,请写出采用传值、传地址、得结果和传名四种方式传递参数的执行结果。,测试:参数传递,16,测试:参数传递, procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传值 A. 5 B. 42 C. 7 D. 77 E.其他值,17,测试:参数传递
9、, procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传地址 A. 5 B. 42 C. 7 D. 77 E.其他值,18,测试:参数传递, procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,得结果 A. 5 B. 42 C. 7 D. 77 E.其他值,19,测试:参数传递, pr
10、ocedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传名 A. 5 B. 42 C. 7 D. 77 E.其他值,20,参数传递方式传值,把实在参数的值传递给相应的形式参数 方法 调用段预先把实在参数的值计算出来并放在被调用段可以拿到的地方 被调用段开始工作时,首先把实参的值抄入形式参数相应的单元 被调用段中,象引用局部数据一样引用形式单元,21,例: procedure P(w,x,y,z); begin y := y*w; z := z+x
11、; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传值,5,3,8,2,8,2,5,5,40,7,5,A. 5 B. 42 C. 7 D. 77 E.其他值,22,参数传递方式传值,把实在参数的值传递给相应的形式参数 方法 调用段预先把实在参数的值计算出来并放在被调用段可以拿到的地方 被调用段开始工作时,首先把实参的值抄入形式参数相应的单元 被调用段中,象引用局部数据一样引用形式单元,23,参数传递方式传地址,把实在参数的地址传递给相应的形式参数 方法 调用段预先把实在参数的地址传递到被调用段可以拿到的地方 程序控制转入被调用段
12、之后,被调用段首先把实在参数的地址抄进自己相应的形式单元中 过程体对形式参数的引用域赋值被处理成对形式单元的间接访问,24,例: procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传地址,5,3,8,2,T1地址,T2地址,a地址,a地址,40,42,42,A. 5 B. 42 C. 7 D. 77 E.其他值,25,参数传递方式传地址,把实在参数的地址传递给相应的形式参数 方法 调用段预先把实在参数的地址传递到被调用段可以拿到的地方 程
13、序控制转入被调用段之后,被调用段首先把实在参数的地址抄进自己相应的形式单元中 过程体对形式参数的引用域赋值被处理成对形式单元的间接访问,26,参数传递方式得结果,传地址的一种变形 方法 每个形参对应两个形式单元,第一个形式单元存放实参地址,第二个单元存放实参的值 在过程体中对形式参数的任何引用或赋值都看作对它的第二个单元的直接访问 过程完成返回前把第二个单元的内容存放到第一个单元所指的实参单元中,27,例: procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); writ
14、e(a); end,得结果,5,3,8,2,T1地址,T2地址,a地址,a地址,7,8,2,5,5,40,7,8,2,40,7,A. 5 B. 42 C. 7 D. 77 E.其他值,28,参数传递方式得结果,传地址的一种变形 方法 每个形参对应两个形式单元,第一个形式单元存放实参地址,第二个单元存放实参的值 在过程体中对形式参数的任何引用或赋值都看作对它的第二个单元的直接访问 过程完成返回前把第二个单元的内容存放到第一个单元所指的实参单元中,29,参数传递方式传名,过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实参。 方法: 在进入被调用段
15、的之前不对实在参数预先进行计值,而是让过程体中每当使用到相应的形式参数时才逐次对它实行计值(或计算地址) 通常把实在参数处理成一个子程序(称为参数子程序),每当过程体中使用到相应的形式参数时就调用这个子程序,30,例: procedure P(w,x,y,z); begin y := y*w; z := z+x; end begin a := 5; b := 3; P(a+b,a-b,a,a); write(a); end,传名,BEGIN a :=5; b:=3; a := a*(a+b); a:= a+(a-b); write(a); END,5,3,40,77,77,A. 5 B. 42 C. 7 D. 77 E.其他值,31,参数传递方式传名,过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都替换成相应的实参。 方法 在进入被调用段的之前不对实在参数预先进行计值,而是让过程体中每当使用到相应的形式参数时才逐次对它实行计值(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026山东理工大学生命与医药学院科研助理招聘2人备考题库附答案详解(培优)
- 2026福建南平武夷发展集团有限公司招聘应届毕业生24人备考题库及参考答案详解
- 2026贵州省茅台学院招聘1人备考题库及答案详解(有一套)
- 2026年阿拉善市党校系统事业单位人员招聘考试备考试题及答案详解
- 2026中国地质大学(北京 )招聘备考题库(第二批)及1套完整答案详解
- 2026重庆巫山县巫峡镇中心卫生院招聘试用期护士5人备考题库及完整答案详解
- 2026湖北省技工院校招聘专业教师30人备考题库及答案详解(全优)
- 2026安徽池州市贵池区祥云路初中选调教师13人备考题库及完整答案详解一套
- 2026四川九洲教育投资管理有限公司招聘英语教师1人笔试备考试题及答案解析
- 2026新疆金元能矿投资集团有限公司招聘2人笔试模拟试题及答案解析
- 2026年北京海淀区九年级中考语文一模试卷附答案解析
- 2026能源控股集团所属铁法能源公司招聘88人(辽宁)笔试备考试题及答案解析
- 《义务教育道德与法治课程标准》2025 版与2022 版改动情况对比
- 2024高考写作漫画类写作指导及10套漫画类作文模考真题
- 中国军事武器
- 第10课第一框课件《抵制校园欺凌和暴力》-【中职专用】中职思想政治《心理健康与职业生涯》(高教版2023·基础模块)
- AIB(2022版)统一检查标准-前提方案与食品安全程序
- 桥梁墩身施工安全注意事项模版
- 激素调节身体多种机能 高二上学期生物浙科版选择性必修1
- 《工程伦理》课后习题及答案
- 地灾防治工程设计中应注意的问题
评论
0/150
提交评论