奥鹏易百

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

帮助中心知识拓展客服QQ 515224986
查看: 347|回复: 0

大工20秋《编译原理基础》辅导资料十四

[复制链接]

1万

主题

4

回帖

2万

积分

论坛元老

积分
29078
发表于 2021-3-7 15:51:55 | 显示全部楼层 |阅读模式
扫码加微信
编译原理基础辅导资料十四主    题:第六章 运行时存储空间的组织与管理
学习时间:2020年12月28日—2021年1月3日“不忘初心、牢记使命”主题理论学习:
坚持党的领导,最根本的是坚持党中央权威和集中统一领导。党章规定“四个服从”,最根本的是全党各个组织和全体党员服从党的全国代表大会和中央委员会;党中央强调“四个意识”,最根本的是坚决维护党中央权威和集中统一领导。这都不是空洞的口号,不能只停留在表态上,要落实到行动上。
     摘选自《在十九届中央纪律检查委员会第二次全体会议上的讲话》内    容:
我们这周主要学习第六章运行时存储空间的组织与管理局部存储分配和全局栈式存储分配的相关内容,希望通过下面的内容能使同学们加深对本章相关知识点的理解。
教学目标:
1.学习全局数据安排和局部数据安排
2.能够理解调用序列的工作
重点和难点:
重点:
局部存储分配策略
活动记录
局部数据的安排
程序块
全局栈式存储分配
活动树和运行栈
调用序列
栈上可变长数据
悬空引用
堆式存储
非局部名字的访问-静态作用域
动态作用域
参数传递
难点:
调用序列
一、基本概念和术语
1、过程的活动
过程的一次执行被称为过程的一次活动
2、活动记录
过程活动时用于存放所需信息的存储空间
二、运行时存储空间的组织和管理
运行时存储空间的组织和管理
通常的命令式编程语言的程序表现为多个函数的实现与互相调用
有一个函数作为入口函数,通常为main()
代码执行过程,实际上是依据过程调用关系形成一个调用结构图
每个过程的执行需要一定的存储空间来辅助
过程的代码需要一定的存储空间
过程中的局部变量需要存储空间来暂时保存
编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的运行时的活动联系起来弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们。
在程序的执行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。
在程序语言中,程序使用的存储单元都是由标识符来表示的。它们对应的内存地址都是由编译程序在编译时或由其生成的目标程序运行时进行分配。
对于编译程序来说存储组织与管理是一个复杂而又十分重要的问题。
2、影响存储分配策略的语言特征
过程能否递归
当控制从过程的活动返回时,局部变量的值是否要保留
过程能否访问非局部变量
过程调用的参数传递方式
过程能否作为参数被传递
过程能否作为结果值传递
存储块能否在程序控制下动态地分配
存储块是否必须显式地释放
过程
过程定义、过程调用、形式参数、实在参数、活动的生存期
4、活动记录
被编译程序每次运行时,编译器从操作系统获得一块存储区(内存)。其内容包括:
编译后的目标代码 (可执行程序 .exe)
数据对象 (各种静态变量和动态变量)
用于管理过程活动的控制栈 (活动记录 )
一般的活动记录的布局

局部数据的安排
字节是可编址内存的最小单位。
一个过程所声明的局部变量,按这些变量声明时出现的次序,在活动记录的局部数据区中依次分配空间。
局部数据的地址可以用相对于某个位置(本过程对应的活动记录的起始位置)的偏移来表示。
数据对象的存储安排深受目标机器寻址方式的影响,存在对齐问题。例如,要求整数(int,long)的相对地址可以被4整除。
由于对齐而引起的无用空间称为衬垫空白区。
程序块
语法如{声明 语句}
本身含有局部变量声明的语句,可以嵌套
最接近的嵌套作用域规则
程序块 B中声明的作用域包括B
如果名字x没有在B中声明,那么B中x的出现是在外围程序块B’的x声明的作用域中,且满足
B’有x的声明
B’比其他任何包含x声明的程序块更接近被嵌套的B
并列程序块不会同时活跃
并列程序块的变量可以重叠分配
可以把程序块看成是不带参数和返回值的函数
7、活动树和运行栈
栈式分配主要用于管理过程的活动记录。
局部变量的生存期是过程活动的时间。
控制进入该过程时,局部变量绑定到存储单元,过程活动结束后,局部变量的空间释放。
调用序列
过程调用和过程返回都需要执行一些代码来管理活动记录栈,保存或恢复机器状态等。
过程调用序列
过程调用时执行的分配活动记录,把信息填入它的域中,使被调用过程可以开始执行的代码
过程返回序列
被调用过程返回时执行的恢复机器状态,释放被调用过程活动记录,使调用过程能够继续执行的代码
即使是同一种语言,过程调用序列、返回序列和活动记录中各域的排放次序,也会因实现而异
设计这些序列和活动记录的一些原则
以活动记录中间的某个位置作为基地址
长度能较早确定的域放在活动记录的中间
一般把临时数据域放在局部数据域的后面
把参数域和可能有的返回值域放在紧靠调用者活动记录的地方
用同样的代码来执行各个活动的保存和恢复
栈上可变长数据
活动记录的长度在编译时不能确定的情况
例:局部数组的大小要等到过程激活时才能确定
三种存储分配策略的比较静态分配
栈式分配
堆式分配

存储空间
静态数据区
栈区
堆区

使用范围
外部变量、静态局部变量、常量
局部变量、形参
动态变量

分配时间
程序开始前
进入过程前
用户决定

释放时间
程序结束后
过程结束
用户决定

地址计算时间
编译时
运行时
运行时

存取速度
快
慢
慢


10、堆式分配
栈式分配策略在下列情况下行不通:
过程活动停止后,局部名字的值还必须维持
被调用者的活动比调用者的活动活得更长,此时活动树不能正确描绘程序的控制流
不遵守栈式规则的有Pascal语言和C语言的动态变量
Java禁止程序员自己释放空间 本章练习题:
(一)填空题
1、每个结点的属性值都标注出来的分析树叫做______________。
答案:注释分析树  (属性分析树)
2、过程活动时用于存放所需信息的存储空间称为______________。
答案:活动记录
(二)问答题
1、假定使用(a)值调用;(b)引用调用;下面程序打印的结果是什么。
program main(input,output);
       var a,b:integer;
       procedure p(x,y,z:integer);
       begin
           y:=y+1 ;
           z:=z+x;
      end;
      begin
           a:=2;
           b:=3;
           p(a+b,a, a) ;
           print a;
      end.
答案:(a)对值调用而言,由于被调用过程中对形式参数的赋值不会改变实在参数的值,因此对过程p的调用不改变a的值,因此a仍然是2。
(b)在引用调用的时候,p(a+b,a,a)相当于p(5,a,a)(注意,5的值存放在临时单元,传送的是临时单元的地址)。在被调用过程中任何对形式参数的引用和赋值,也就是对相应实在参数的引用和赋值。因此y:=y+1的执行结果使得a等于3,进一步执行z:=z+x使得a=8。拓展资料一个7年工作经验的程序员的总结毕业7年时间过去,在软件行业混迹了有一段时间,回头看看这七年的时间,我的收获在哪里?
? ? 辗转呆了三家外包公司,感觉自己和7年前比较。接触的技术广了些,日常的工作就是依葫芦画瓢,多了几分复制和粘贴,大多数就是模仿,模仿公司现有产品代码,模仿网上搜集到的代码。很多代码都依赖与现在无处不在的“度娘”,感觉记性不好,虽然说遇到的问题有记录下来,但是当再次遇到还得依赖手上的笔记。自己心里也时常问自己?这就是我们的价值吗?
? ? 中间有想过选中一门技术,让自己变成这方面的大牛,然后趁着这股热劲,上51cto,上csdn关注相关微博,下载学习的app到手机,空闲时间就去看看,甚至想各个知识点或者各个框架都想自己实际操作过,加深了解更多这方面技术,但最终总有这样那样的事情,把当初的决心一点点淡化,直到完全湮灭。
? ? 听着周围的朋友,认识的不认识的人有接私单赚外快,自己也急切希望能去加入这个队伍,然后关注码市、程序员客栈等众包、外部网站,进去浏览所有的需求,发现基本没有一个自己能独立完成的。然后也就放弃了这种想法。老老实实的搬砖。
? ? 然后日子一天天这样的过去,发现自己好像就一直停留在这种状态了,到了现在就是一片迷茫,我的路在何方?
? ?作为在IT行业的老油条,我觉得要成为一名优秀的程序员,我觉得需要具备以下习惯:
? ?一. 对新技术的好奇心和挖根究底的习惯,这样可以让自己去了解出正常工作之外的一些新的东西。同时挖根究底的习惯会让你做比较深入的探寻,加深你对这种新技术的理解,说不定在后面的某个地点就能榜上你的忙。
? ?二.技术在于积累,要有一个做笔记记录的习惯,记录你遇到的问题,记录你学习到的技术,同时做笔记也是你对脑海里东西的一种总结,一种输出。
? ? 三.很强的自制力,定下的计划不轻易因为外界因素改变,即便最后没有按计划完成,但是朝计划走得越远,得到的就会越多。
? ? 四.动手能力,看10遍代码不如自己敲一遍代码让你记忆深刻,而实践是检验技术理论的唯一标准。要多写代码,多实操。
? ?---------------------
作者:zhongweill622
来源:CSDN
原文:https://blog.csdn.net/zhongweill622/article/details/79811172
版权声明:本文为博主原创文章,转载请附上博文链接!
本内容由易百教育整理发布
网址www.openhelp100.com
QQ 515224986
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|www.openhelp100.com ( 冀ICP备19026749号-1 )

GMT+8, 2024-6-29 20:35

Powered by openhelp100 X3.5

Copyright © 2001-2024 5u.studio.

快速回复 返回顶部 返回列表