编译原理课程第15讲.ppt

编译原理课程第15讲.ppt

ID:51495593

大小:598.00 KB

页数:48页

时间:2020-03-24

编译原理课程第15讲.ppt_第1页
编译原理课程第15讲.ppt_第2页
编译原理课程第15讲.ppt_第3页
编译原理课程第15讲.ppt_第4页
编译原理课程第15讲.ppt_第5页
资源描述:

《编译原理课程第15讲.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第六章运行时存储空间的组织和管理编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的运行时的活动联系起来弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们。在程序的执行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。在程序语言中,程序使用的存储单元都是由标识符来表示的。它们对应的内存地址都是由编译程序在编译时或由其生成的目标程序运行时进行分配。所以对于编译程序来说存储组织与管理是一个复杂而又十分重要的问题。第六章运行时存储空间的组织和管理过程的活动过程的一次执行称

2、为过程的一次活动活动记录过程的活动需要可执行代码和存放所需信息的存储空间,后者称为活动记录本章内容讨论一个活动记录中的数据安排程序执行过程中,所有活动记录的组织方式第六章运行时存储空间的组织和管理过程P一次活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作时间,包括执行P时调用其它过程花费的时间。过程可以是递归的一个过程可对应多个活动第六章运行时存储空间的组织和管理影响存储分配策略的语言特征过程能否递归当控制从过程的活动返回时,局部变量的值是否要保留过程能否访问非局部变量过程调用的参数传递方式过程能否作为参数被传递过程能否作为结果值传递存

3、储块能否在程序控制下动态地分配存储块是否必须显式地释放本章在逻辑地址空间讨论6.1(过程内部)局部存储分配策略6.1.1过程过程定义、过程调用、形式参数、实在参数、活动的生存期Proceduref(a:int,b:bool){intc;…}过程定义voidmain(){f(3,true);…}过程调用6.1局部存储分配策略6.1.2名字的作用域和绑定名字的作用域一个声明起作用的程序部分称为该声明的作用域。inta;Functionf(intb){intc;…}voidmain(){a=0;c=0;f(3);}正确,在a的作用域内错误,超出了c的作用域6.1

4、局部存储分配策略6.1.2名字的作用域和绑定名字的作用域即使一个名字在程序中只声明一次,该名字在程序运行时也可能表示不同的数据对象。inta;Functionf(intb){intc;…}voidmain(){a=0;f(3);f(5);}两次调用,函数f中变量c对应不同的数据对象保存值的存储单元6.1局部存储分配策略名字到存储单元的绑定环境把名字映射到左值(存储单元),而状态把左值映射到右值(值)。赋值改变状态,但不改变环境。如果环境将名字x映射到存储单元s,我们就说x被绑定到s。名字存储单元状态值环境6.1.2名字(变量)的作用域和绑定A=b5A4bA

5、56.1局部存储分配策略静态概念和动态概念的对应静态概念动态对应过程的定义过程的活动名字的声明名字的绑定声明的作用域绑定的生存期6.1局部存储分配策略6.1.3活动记录编译程序每次运行时,编译器从操作系统(OS)获得一块存储区(内存)。其内容包括:编译后的目标代码(可执行程序.exe)数据对象(各种静态变量和动态变量)用于管理过程活动的控制栈(活动记录)过程的活动中用于存放所需信息的存储空间,称为活动记录或帧6.1局部存储分配策略6.1.3活动记录编译程序每次运行时,编译器从操作系统(OS)获得一块存储区(内存)。其空间安排:代码静态数据堆栈目标代码(.e

6、xe)静态变量和外部变量活动记录活动记录及动态变量6.1局部存储分配策略6.1.3活动记录例子voidp(){…}voidmain(){…;p();….;}代码静态数据main的活动记录堆p的活动记录栈6.1局部存储分配策略6.1.3活动记录一般的活动记录的布局返回值临时数据实在参数控制链访问链机器状态局部数据本过程返回给调用过程的值调用过程传递给本过程的参数指向调用过程的指针用于引用存于其他活动记录的非局部数据用于保存本过程调用前的机器状态本过程内部定义的局部变量临时变量,中间结果6.1局部存储分配策略6.1.4局部数据的安排字节是可编址内存的最小单位。

7、一个过程所声明的局部变量,按这些变量声明时出现的次序,在活动记录的局部数据区中依次分配空间。局部数据的地址可以用相对于某个位置(本过程对应的活动记录的起始位置)的偏移来表示。数据对象的存储安排深受目标机器寻址方式的影响,存在对齐问题。例如,要求整数(int,long)的相对地址可以被4整除。由于对齐而引起的无用空间称为衬垫空白区。例题在X86/Linux工作站上,以下两个结构的size分别是20和16,为什么不一样?typedefstruct_a{typedefstruct_b{charc1;charc1;longi;charc2;charc2;longi

8、;doublef;doublef;}a;}b;第一部分存储区(内存

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

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

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