运行时的存储组织哈工大王宏志

运行时的存储组织哈工大王宏志

ID:46587109

大小:2.59 MB

页数:126页

时间:2019-11-25

运行时的存储组织哈工大王宏志_第1页
运行时的存储组织哈工大王宏志_第2页
运行时的存储组织哈工大王宏志_第3页
运行时的存储组织哈工大王宏志_第4页
运行时的存储组织哈工大王宏志_第5页
资源描述:

《运行时的存储组织哈工大王宏志》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章运行时的存储组织SchoolofSoftwareHarbinInstituteofTechnology重点:符号表的内容、组织,过程调用实现,静态存储分配、动态存储分配的基本方法。难点:参数传递,过程说明语句代码结构,过程调用语句的代码结构,过程调用语句的语法制导定义,栈式存储分配。8/30/20212第8章运行时的存储组织8.1与存储组织有关的源语言概念与特征8.2存储组织8.3静态存储分配8.4栈式存储分配8.5栈中非局部数据的访问8.6堆管理8.7本章小结8/30/202138.1与存储组织有关的源语言 概念与

2、特征编译程序必须准确地实现包含在源程序中的各种抽象概念,如名字、作用域、数据类型、操作符、过程、参数和控制流结构等,这些概念反映了源语言所具有的一些特征,对它们的支持往往会影响运行时的存储组织和分配策略给定一个源程序,编译程序必须根据源语言的特征(规定)为源程序中的许多问题做出决策,包括何时、怎样为名字分配内存地址。静态策略:在编译时即可做出决定的策略动态策略:直到程序执行时才能做出决定的策略8/30/202148.1.1名字及其绑定“名字”、“变量”和“标识符”的区别与联系名字和变量分别表示编译时的名字和运行时该名字所代

3、表的内存位置。标识符则是一个字符串,用于指示数据对象、过程、类或对象的入口。所有标识符都是名字,但并不是所有的名字都是标识符,名字还可以是表达式。例如,名字x.y可能表示x所代表结构的域y。同一标识符可以被声明多次,但每个声明都引入一个新的变量。即使每个标识符只被声明一次,局部于某个递归过程的标识符在不同的运行时刻也将指向不同的内存位置。8/30/20215名字的绑定从名字到值的两步映射环境把名字映射到左值,而状态把左值映射到右值赋值改变状态,但不改变环境。如果环境将名字x映射到存储单元s,我们就说x被绑定到s名字内存位置

4、(变量)状态值环境8/30/202168.1.2声明的作用域x的声明的作用域是程序中的这样一段区域,在该区域中,x的引用均指向x的这一声明。对于某种程序设计语言,如果只通过考察其程序就可以确定某个声明的作用域,则称该语言使用静态作用域;否则称该语言使用动态作用域。C++、Java和C#等还提供了对作用域的显式控制,其方法是使用public、private和protected这样的关键字。声明的作用域是通过符号表进行管理的,详见8.4节的讨论。8/30/202171.静态作用域在具有程序块结构的语言中,变量声明的静态作用域规

5、则如下:如果名字x的声明D属于程序块B,则D的作用域是B的所有语句,只有满足如下条件的程序块B‘除外:B’嵌套在B中(可以是任意的嵌套深度),且B‘中具有同一名字x的一个新的声明。令B1,B2,…,Bk是包围x的本次引用的所有程序块,Bk-1是Bk的直接外层程序块,Bk-2是Bk-1的直接外层程序块,如此类推。找到使x的某个声明属于Bi的最大i,则x的本次引用指向Bi中的这个声明。换句话说,x的本次引用处在Bi中的这个声明的作用域中。8/30/202181.静态作用域表8.1图8.10所示程序中声明的作用域8/30/202

6、192.显式访问控制类和结构为其成员引入了一种新的作用域如果p是某个带有域(成员)x的类的对象,则p.x中x的引用将指向该类定义中的域x。与程序块结构类似的是,类D中成员x的声明的作用域将会扩展到D的任何子类D',除非D'中具有同一名字x的一个局部声明。8/30/2021102.显式访问控制通过使用像public、private和protected这样的关键字,C++或Java类的面向对象语言提供了一种对超类中成员名字的显式访问控制。这些关键字通过限制访问来支持封装。因此,私有名的作用域只包含与该类及其友类相关联的方法声明

7、和定义,保护名只对其子类是可访问的,而公用名从类的外部也是可以访问的。8/30/2021113.动态作用域动态作用域规则相对于时间而静态作用域规则相对于空间静态作用域规则要求我们找出某个引用所指向的声明,条件是该声明处在包围该引用的“空间上最近的”单元(程序块)中。动态作用域也是要求我们找出某个引用所指向的声明,但条件是该声明处在包围该引用的“时间上最近的”单元(过程活动)中。8/30/2021123.动态作用域“动态作用域”通常是指下面的策略名字x的引用指向带有x声明的最近被调用的过程中x的这个声明。例如,过程被当做参数

8、进行传递时8/30/2021138.1.3过程及其活动将“过程、函数和方法”统称为“过程”过程定义是一个声明,它的最简单形式是把一个标识符和一个语句联系起来。该标识符是过程名,而这个语句是过程体。当过程名出现在可执行语句中时,称相应的过程在该点被调用。过程调用就是执行被调用过程的过程体。注意,过程调用也

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。