- 1、本文档共110页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章运行环境,哈工大王宏志
运行时存储空间的组织和管理 运行时的程序 过程的活动 过程的一次执行称为过程的一次活动 活动记录 过程的活动需要可执行代码和存放所需信息的存储空间,后者称为活动记录 本章内容 影响存储分配策略的语言特征 活动记录中各种数据域的安排(局部) 各种存储分配策略(全局) 静态分配、栈式分配、堆式分配 非局部数据访问的实现方法 各种参数传递方式及其实现 符号表管理 影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 过程能否作为结果值传递 存储块能否在程序控制下动态地分配 存储块是否必须显式地释放 7.1 局部存储分配策略 7.1.1 过程 过程定义 过程声明:过程名+过程体 过程调用 执行被调用过程的过程体 形式参数 过程定义中用于在主调和被调间传递数据的标识符 实在参数 过程调用时用于在主调和被调间传递数据的变元 活动的生存期 程序执行期间的连续的步序列(过程执行的第一到最后一步) 名字的作用域和绑定 名字的作用域 一个声明起作用的那部分程序称为该声明的作用域。 即使一个名字在程序中只声明一次,该名字在程序运行时也可能表示不同的数据对象(即保存值的存储单元)。 符号表可用来寻找对一个名字的出现起作用的声明 名字的绑定 从名字到值的两步映射。 环境把名字映射到左值,而状态把左值映射到右值。 赋值改变状态,但不改变环境。 如果环境将名字x映射到存储单元s,我们就说x被绑定到s。 名字的绑定 静态概念和动态概念的对应 活动记录 过程一次执行所需的信息用一块连续的存储区来管理,称为活动记录。 一般的活动记录的布局: 局部数据的安排 字节是可编址内存的最小单位。 变量所需的存储空间可以根据其类型而静态确定。 一个过程所声明的局部变量,按这些变量声明时出现的次序,在局部数据域中依次分配空间。 局部数据的地址可以用相对于某个位置的地址来表示。 数据对象的存储安排还有一个对齐问题。 整数必须放在内存中特定的位置,如被2、4、8整除的地址 局部数据的安排 在SPARC/Solaris工作站上下面两个结构的size分别是24和16,为什么不一样? typedef struct _a{ typedef struct _b{ char c1; char c1; long i; char c2; char c2; long i; double f; double f; }a; }b; 局部数据的安排 在SPARC/Solaris工作站上下面两个结构的size分别是24和16,为什么不一样? typedef struct _a{ typedef struct _b{ char c1; 0 char c1; 0 long i; 4 char c2; 1 char c2; 8 long i; 4 double f; 16 double f;8 }a; }b; 局部数据的安排 在X86/Linux机器的结果和SPARC/Solaris工作站不一样,是20和16。 typedef struct _a{ typedef struct _b{ char c1; 0 char c1; 0 long i; 4 char c2; 1 char c2; 8 long i; 4 double f; 12 double f;8 }a; }b; 程序块 本身含有局部变量声明的语句 可以嵌套 最近嵌套作用域规则 并列程序块不会同时活跃 并列程序块的变量可以重叠分配 程序块 main() { /? begin of B0 ?/ int a = 0; int b = 0; { /? begin of B1 ?/ int b = 1; {/? begin of B2 ?/ int a = 2; }/? end of B2 ?/ {/? begin of B3 ?/ int b = 3; }/? end of B3 ?/ }/? end of B1 ?/ }/? end of B0 ?/ 7.2 全局存储分配策略 介绍程序运行时所需的各个活动记录在存储空间的分配策略 描述过程的目标代码怎样访问绑定到局部名字的存储单元 介绍三种分配策略 静态分配策略 栈式分配策略 堆式分配策略 7.2.1 运行时内存的划分 7.2.2 静态存储分配策略 名字在程序被编译时绑定到存储单元,不需要运行
您可能关注的文档
- 第九章数据采集技术第一讲.ppt
- 2数据类型运算符表达式_jwx.ppt
- 空间数据库课件.ppt
- 2015年通信网基础习题.ppt
- Ch4_数据运算.ppt
- 2.1 获取信息的过程与方法.ppt
- 第三章 管理信息系统的技术基础.ppt
- 1第1章-概述-第1讲-sql.ppt
- 计算机基础培训.ppt
- 第1章 信息的基础知识.ppt
- 2025年中国锻铁围栏市场调查研究报告.docx
- 2025年中国椭圆型市场调查研究报告.docx
- 2025年中国无蔗糖原味豆浆市场调查研究报告.docx
- 2025-2031年中国泛在电力物联网行业发展运行现状及投资潜力预测报告.docx
- 2025年中国制袋机零件市场调查研究报告.docx
- 2025年中国智能除垢型电子水处理仪市场调查研究报告.docx
- 2025-2031年中国甘肃省乡村旅游行业市场深度研究及投资策略研究报告.docx
- 2025-2031年中国干海产品行业市场发展监测及投资战略规划报告.docx
- 2025年中国全铝图解易拉盖市场调查研究报告.docx
- 2025年中国人造毛皮服装市场调查研究报告.docx
文档评论(0)