ch9-10 运行时环境_(张素琴).ppt

ch9-10 运行时环境_(张素琴).ppt

ID:48182650

大小:614.50 KB

页数:34页

时间:2020-01-18

ch9-10 运行时环境_(张素琴).ppt_第1页
ch9-10 运行时环境_(张素琴).ppt_第2页
ch9-10 运行时环境_(张素琴).ppt_第3页
ch9-10 运行时环境_(张素琴).ppt_第4页
ch9-10 运行时环境_(张素琴).ppt_第5页
资源描述:

《ch9-10 运行时环境_(张素琴).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1第10章目标程序运行时的存储组织21.存储组织为了使目标程序运行,编译程序从操作系统得到一块内存存储区,存储区容纳:1.生成的目标代码空间;2.目标代码运行需要的数据空间,包括用户定义的变量和常量,临时工作单元,过程调用所需的联系单元,输入输出缓冲区;3.用于保存过程活动踪迹的一个控制栈。3目标代码静态数据栈活动记录堆1.编译后知道目标代码的大小。如Pascal,C,Fortran;2.静态数据区存放编译时就能确定所占用空间大小的数据;3.栈堆区:用于存放可变数据以及管理过程活动记录的控制信息,如Pascal,C语言。2.运行

2、时刻内存的划分:数据空间43.活动记录对于pascal语言来说,运行过程中,当调用一个过程时,在栈顶构筑它的活动记录;一个活动所需要的信息的每个数据项有相同的生存期,因此,组织成一个活动记录是很自然的。当这个过程的活动执行完后,把它从栈顶弹出。把过程的一个活动所需要的信息组织成一块连续的存储单元,称为活动记录。5返回值实在参数控制链访问链保存机器状态局部变量临时变量临时变量:编译产生。保存机器状态:调用过程的活动在调用点的机器状态,包括计数器,各种寄存器的值。局部数据:过程中定义的局部量。访问链:指向本活动要访问的非局部数据所在

3、的活动记录.控制链:指向主调过程的活动记录的首地址。形式单元内情向量连接数据局部数据sptopPascal的活动记录6函数environment把一个名字映射为一个l-value(左-值),4.名字与存储的绑定引进两个函数,environment和state。environment把名字映射到一个存储单元上;state把存储单元映射到那里所存放的值上。而函数state把一个l-value(左-值)映射为一个r-value(右-值)。如下图所示。名字与存储单元的绑定是指把源程序中的数据名字映射到目标机存储单元的过程。7名字存储单元

4、值存储分配程序运行environmentstatel-valuer-value图:从名字到值的两个阶段映射8编译结束,知道每个过程的活动记录的长度,将其填写到相应的过程符号表中;运行时,调用哪个过程,就在运行栈顶,推进那个过程的活动记录。一个名字所需的存贮空间的数量是由它的类型确定的;多字节对象存放于连续的字节中,以第一个字节的地址作为该对象的地址;910.1数据空间的三种不同管理方法3.1静态存储分配:FORTRAN3.2栈式存储分配:PASCAL,C3.3堆式存储分配:PASCAL,C采用哪种分配策略是由源语言的语义决定的。

5、1010.1.1静态存储分配如Fortran语言,各子程序段中的局部变量彼此独立,不会在不同子程序间引用、赋值,每个变量的存储空间大小都是常量,整个程序所需的数据空间的总量在编译时完全确定,从而每个变量的内存空间可以静态分配。在编译时刻为每个数据项目确定出在运行时刻的存储空间中的位置,且这种绑定在运行时刻不再发生变化。11限制:1.在编译时刻知道数据目标的大小和它们在内存位置上约束;2.不能递归调用过程;3.不能动态地建立数据结构。12与静态分配不同的是,在每次活动开始时把局部名字和新的存储单元绑定,在活动结束时,活动记录从栈中

6、弹出,局部名字的存储空间随之释放。对于具备递归调用、可变数组、允许用户申请和释放内存空间的高级语言,就需要采用动态存储管理技术管理内存,主要包括两种动态存储分配方式:栈和堆式。10.1.2动态存储分配13基于栈存储分配的原理:存储空间被组织成栈,活动记录的推入和弹出,分别对应于活动的开始和结束。每当调用一个子程序时,它所需的数据存储空间就分配在栈顶,当该子程序运行结束就释放这部分内存存储数据空间;子程序的数据空间:(1)生存期在本过程本次活动中的数据对象,如局部变量、参数单元、临时变量等;(2)用于管理活动记录的信息,如当A调用

7、B时,A被中断,则A当前寄存器和返回地址等信息。当B执行完,便根据栈中信息回复A的运行。适合Pascal、C、Algol语言。数据空间使用遵从“先申请后释放,后申请先释放”。10.1.3栈式动态存储分配14如果一个程序语言让用户自由申请内存数据空间和退还数据空间的机制,如C++中的new,delete。空间使用不遵从“先申请后释放,后申请先释放”,这样就不能使用栈式存储分配方式。需要使用堆式存储方式。堆是一片足够大的存贮空间,每当需要时,就从这片空间中分配一块,用完时,再归还给堆。经过一段时间运行后,运行空间被划分成许多块,需要

8、整理。10.1.4堆式动态存储分配1510.2栈式存贮分配的实现条件:C满足上述条件C程序结构全局数据说明Main(){Main数据说明}VoidR(){ R数据说明}VoidQ(){ Q数据说明}不允许嵌套定义允许递归调用10.2.1简单栈式存贮分配的实现16

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

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

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