- 1、本文档共81页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
调用序列(续) 返回序列 被调用者设置返回值(位于栈底,与调用者活动记录相邻) 利用保存的状态信息,被调用者恢复top_sp和其他寄存器,然后跳转到返回地址 调用者复制返回值 可变长度数据 top_sp top 7.3.3 空悬(dangling)引用 例7.6: 内存空间已释放,但还存在指向它的引用——程序员的错误! int *dangle() { int i = 23; return i; } main() { int *p; p = dangle(); } 7.3.4 堆分配策略 栈分配策略的局限,不能处理下列情况 局部名字的值在活动结束后能够保持 被调用函数的活动生存期比调用者长——可用活动树表示控制流的语言无法实现 对小的(或大小已知的)活动记录 为若干可能大小,创建空闲块链表(静态) 为大小为s的活动记录分配空间,尽量使用s’的空闲块表,s’为大于等于s的最小值。空间释放时,将块退回空闲块链表 对大块内存分配,利用堆管理器 堆分配策略(续) r的活动记录得到保持 7.4 访问非局部名字 栈 词法/静态作用域规则lexical-,static-scope ruleC、Pascal、Ada嵌套问题 动态作用域规则dynamic-scope ruleLisp、APL、Snobol 7.4.1 程序块(block) 语句块+它的局部数据声明{ 声明 语句} 特性:嵌套结构、不会交叉 “最近嵌套规则”,most closely nested rule 对于块B中的声明,其作用域包括B 块B中未声明名字x,则B中对x的引用由某个外层块B’中x的声明所确定,B’满足: 在包围B的,且有x的声明的外层块中,B’是距离B最近的那个 嵌套块作用域示例 main() { int a = 0; int b = 0; { int b = 1; { int a = 2; printf(“%d %d\n”, a, b); } { int b = 3; printf(“%d %d\n”, a, b); } printf(“%d %d\n”, a, b); } printf(“%d %d\n”, a, b); } B0 B1 B2 B3 声明 作用域 int a = 0; B0-B2 int b = 0; B0-B1 int b = 1; B1-B3 int a = 2; B2 int b = 3; B3 运行结果 2 1 0 3 0 1 0 0 实现方法 栈实现,将块看作过程 过程内实现 7.4.2 无过程嵌套的静态作用域 C 局部名字——栈 任何过程之外的名字——静态分配 非局部——全局概念 过程可作为参数和返回值?非局部名字都可用静态地址访问到 过程作为参数——无嵌套情况 program pass(input, output); var m : integer; function f(n : integer) : integer; begin f := m + n end; function g(n : integer) : integer; begin g := m * n end; procedure b(function h(n : integer) : integer); begin write(h(2)) end; begin m := 0; b(f); b(g); writeln end. 运行结果: 2 0 7.4.3 包含过程嵌套的静态作用域 Pascal,最近嵌套规则 program sort(input, output); var a : array[0..10] of integer; x : integer; procedure readarray; var i : integer; begin … a … end {readarray}; procedure exchange(i, j : integer); begin x:=a[i];a[i]:=a[j];a[j]:=x end {exchange}; procedure quicksort(m, n : integer); var k, v : integer; function partition(y, z : integer) : integer; var i, j : integer; begin …a… …v… end {partition}; begin … end {quicksor
您可能关注的文档
- 青虾演示幻灯.ppt
- 青阳压疮的护理进展演示幻灯.ppt
- 青云陋舍短期住宿创业项目计划书演示幻灯.ppt
- 青贮讲座-专题(青贮调制及其技术要点)演示幻灯.ppt
- 青贮饲料的制作与使用(二)演示幻灯.pptx
- 青贮饲料的制作与使用(一)演示幻灯.ppt
- 青贮饲料演示幻灯.ppt
- 奶牛无抗养殖技术交流会演示幻灯.ppt
- 奶牛养殖技术-科技培训演示幻灯.ppt
- 奶牛肢蹄病演示幻灯.ppt
- 教科版(2017秋)科学二年级上册2.6 做一顶帽子 教学设计.docx
- 河北高频考点专训四 质量守恒定律的应用教学设计---2024-2025学年九年级化学人教版(2024)上册.docx
- 大单元教学【核心素养目标】6.3 24时计时法教学设计 人教版三年级下册.docx
- 河南省商城县李集中学2023-2024学年下学期九年级历史中考模拟八(讲评教学设计).docx
- 第18章 第25课时 正方形的性质2023-2024学年八年级下册数学课时分层作业教学设计( 人教版).docx
- Module 8 模块测试 教学设计 2024-2025学年英语外研版八年级上册.docx
- 2024-2025学年小学数学五年级下册浙教版教学设计合集.docx
- 2024-2025学年小学劳动四年级下册人民版《劳动》(2022)教学设计合集.docx
- 2024-2025学年小学数学三年级上册冀教版(2024)教学设计合集.docx
- 2024-2025学年高中生物学必修1《分子与细胞》人教版教学设计合集.docx
文档评论(0)