研究生课程_程序语言设计原理教程_第04章汇.ppt

研究生课程_程序语言设计原理教程_第04章汇.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
研究生课程_程序语言设计原理教程_第04章汇

第4章 存 储 4.1 程序变量的时空特性 4.1.1 引用和指针 4.1.2 递引用 dereference 4.1.3 变量的时态 分配/未分配/除分配 分配: 为程序对象创建—存储对象 编译时分配叫静态分配 allocate 运行时分配叫动态分配如声明指针p, 执new才分配 未分配: 声明了未分配运行时分配 除分配: 取消存储对象(程序对象) delete操作显式 自动除配: 无用单元收集Garbage collection 动态语言有,静态可有Ada可没有C 续 4.2 存储模型 基元类型值 仅除数组 记录、构造、表 不可更新其中一元素 函数抽象, ——ML重过程 变量引用 4.2.1存储对象的生存期 全局变量 和引用程序寿命一样长 局部变量 和程序中的一个模块寿命一样长 持久变量 比程序寿命长除非显式撤销 文件变量 瞬间变量(transient)持久变量的逆 4.2.2 静态存储对象 4.2.4 动态存储对象 4.2.5 堆栈帧管理 续 4.2.6 动态堆存储 忽略死对象 不超过一页浪费, 若寿命差不多浪费不大 保持一个自由表(链表)8个字节头说明数据 按类型长度保持多个表减少识别域开销(Ada) 4.3 悬挂引用Dangling Reference 4.4 变量更新 4.4.2 动态更新 续 4.5 有副作用表达式 4.5.2 命令表达式 * * 存储对象是程序对象在计算机中的实现 程序对象不一一对应为存储对象 x:=0; x,0是两程序对象 只有一个存储对象x加指令清零 初值常量也不作为单独存储对象 计算对象有地址非固定地址, 因时而变, 相对地址 虚存空间 P指针是地址变量 *P是P所指的内容, 也有左值和右值 *P左值是P所指地址值,即P的值 *P右值是所指地址内的内容值 引用是常指针是变量的别名, 但实现是不一样的 通过指针变量引用变量的值为递引用 *P1右值即递引用 有些语言显式递引用算符如FORTH的@ 1 13 VARIABLE xx (声明变量xx并赋初值13) 2 0 VARIABLE Y (声明变量Y并赋初值0) 3 xx @ 2 * Y ! (相当于Y=xx*2) 如果只写xx 2 * 则为将xx的地址乘以2放在Y之中 4 3 ? ? a b c d e f 声明和定义:定义必然声明;反之不然 声明的两个作用 :给出对象, 该对象的时间有效性 出了声明的作用域该对象失去定义。在声明的作用 域内显式删除也失去定义 定义/未定义/失去定义 只要分配存储对象必然有残值, 无意义即未定义 赋值或初值变量得以定义 a,b:分配且有定义 c,d:分配未定义或失去定义 e,f:未分配或除配 可存储值Storable:指最小的可直接访问的可存储单元中的值 Pascal可存储值:集合不选择更新某一元素是可存储值,Pascal, C ,Ada数组可选择更新, 不是可存储值。 引用非可存储(C++可存储), 过程和函数名也非可存储 ML几乎都是可存储值, 也带来毛病:每次更新结构数据都要重来。它们是: ( if exp then sin else cos ) (x) 得sin(x)|cos(x) 可存储值 每个存储对象都有创建(生), 可用(活着),撤销(死)的生命期。按生命期长短分: 编译时分配存储对象, 近代语言类属对象直到装入后确立(elaboration)之时才定下存储对象叫静态分配 一旦执行不再改动其存储,直至所在存储单元无效叫静态(Static)存储对象 全局变量均为隐式的静态对象, COBOL,BASIC全 静态,ALGOL,C是显示声明静态,Pascal除全局,Ada 不能。 C语言的静态变量是既私有又不随所在声明块中消逝, 全局于所在文件。auto是静态分配动态装入不叫静态对象。Extern是静态对象。 extern static auto 4.2.3动态存储对象 把寿命特长的(如文件,全局量)排出来归到栈底的某一组,把寿命特 短的(如循环控制变量)另立嵌套组,这个问题也就解决。 块5 块66 块1 块2 块3 块4

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档