- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
引用方法 通过“静态链”找到最近的“嵌套外层”中说明的变量。 (1) 静态连接和静态链 静态连接:指向嵌套直接外层的最新活动记录的指针。 静态链:各嵌套程序单元的活动记录中,静态连接的序列构成一个静态链。 A E F G F 例:A call E; E call F; F call G; G call F; ... ... ... ... ... 非局部变量x的地址的求法 假设当前处在栈顶的是单元B的活动记录,单元B中引用了单元A中的变量x。单元A的层次为nA、单元B的层次为nB。要找到变量x的存放地址,即: DA + offset(x) 关键是要找到单元A的活动记录DA。 DA的求法 nB - nA = 0:A和B是同一层(A就是B) DA = current nB - nA = 1:A是B的直接外层(第1个外层) DA = D[current + 2] nB - nA = 2:A是B的第2个外层 DA = D[D[current + 2] + 2] nB - nA = 3:A是B的第3个外层 DA = D[D[D[current + 2] + 2] + 2] DA的求法 令nB - nA = d,定义函数f(d),表示从B的活动记录出发,沿静态链搜索d步,可以到达A的活动记录。 f(d) { if(d=0) then return current ; else return D[ f(d-1) + 2 ] ; } (3) 静态连接的建立(单元X调用单元B时) 当前栈顶为X的活动记录,需要建立B的活动记录。 (3)nX-nB=1 (4)nX-nB1 (1)nX-nB=-1 X B call B B X call B B call B X (2)nX-nB=0 B X call B … … … … … (1) nX-nB = -1, B的静态连接=f(0) (2) nX-nB = 0, B的静态连接=f(1) (3) nX-nB = 1, B的静态连接=f(2) (4) nX-nB = d, B的静态连接=f(d+1) 因此,静态连接算法为:D[free+2] = f(d+1) CALL P的处理 (1) D[ free ] := ip + 6(保存返回地址) (2) D[free + 1] := current (设置动态链接 ) (3) D[free + 2] := f(d+1) (设置静态链接 ) (4) current := free (建立新的current) (5) free := free + L (调整free) (6) ip := P(转移到P) 参数传递 形参和实参 形参(Formal Parameter):被调用单元的参数 实参(Actual Parameter) :调用单元的参数 参数传递的类型 传值、传值得结果、传地址 参数传递实例 procedure main begin a, b: integer ; a:=1; b:=2 ; print ( a , b ) ; swap( a , b ) ; print ( a , b ) ; end procedure swap(x , y) var x,y: intger; begin print ( x , y ) ; x := x+y ; y := x-y ; x := x-y; print ( x , y ) end (1) 传值(单向传递) 实参的值?形参的值 运行结果: 1 , 2 1 , 2 2 , 1 1 , 2 (2) 传值得结果(双向传递) 实参的值?形参的值 形参的结果值?实参的结果值 运行结果: 1 , 2 1 , 2 2 , 1 2 , 1 (3) 传地址(共用同一数据单元) 实参的地址?形参的地址 运行结果: 1 , 2 1 , 2 2 , 1 2 , 1 注意(3)和(2)的区别,如调用swap( a , a )时的运行结果。 编译技术 第七章 运行时存储空间的组织 程序的存储空间 1. 代码空间和数据空间 1.1 程序投入运行的必要条件 程序要投入运行,必须在内存中分配一定的存储空间,并将程序装入其中,包括: 可运行的代码(代码空间) 代码运行的环境(数据空间) 1.2 代码空间(C) 内容:线性存放着目标指令序列。当前执行的指令位置由指令指针ip指示。 1.3 数据空间(D) 内容:变量、常数、控制信息、描述符等。 静态分配:在运行前就可确定数据空间的大小, 在编译时刻就能进行的存储分配。 动态分配:运行时才能进行的存储分配。 活动记录 程序由程序单元(函数、子程序)组成,因此程序的数据空间由相应
您可能关注的文档
最近下载
- 成人鼻肠管的留置与维护(2021团体标准解读)全文.pptx
- 【国家标准】国家职业技能标准 (2019年版) 起重装卸机械操作工.pdf VIP
- 小儿轮状病毒性肠炎护理ppt.pptx
- Pilon骨折精品课件.ppt VIP
- 中纺机集团对下属企业工资总额管理办法介绍.docx VIP
- 中国银行新疆区分行招聘笔试试题2024 .pdf VIP
- 2025中国银行新疆区分行社会招聘笔试备考题库及答案解析.docx VIP
- 2024电能计量装置典型设计低压用电客户.docx VIP
- 粗轧机AWC液压控制系统故障原因分析和改进.pdf VIP
- 2025年中国银行社会招聘备考试题及答案解析.docx VIP
文档评论(0)