运行时存储空间的组织课件ehxn.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《运行时存储空间的组织课件ehxn.pptx》由会员分享,可在线阅读,更多相关《运行时存储空间的组织课件ehxn.pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第13章 运行时存储空间的组织第一节 程序的存储空间1.代码空间和数据空间1.1 程序投入运行的必要条件程序要投入运行,必须在内存中分配一定的存储空间,并将程序装入其中,包括:n 可运行的代码(代码空间)n 代码运行的环境(数据空间)1.2 代码空间(C)内容:线性存放着目标指令序列。当前执行的指令位置由指令指针ip指示。1.3 数据空间(D)内容:变量、常数、控制信息、描述符等。n 静态分配:在运行前就可确定数据空间的大小,在编译时刻就能进行的存储分配。n 动态分配:运行时才能进行的存储分配。2.活动记录程序由程序单元(函数、子程序)组成,因此程序的数据空间由相应程序单元的数据空间组成。n
2、一个程序单元的数据空间叫做该程序单元的活动记录。n 一个程序单元在执行过程中所需要的数据信息、管理信息都是通过它的活动记录来存放的。n 一个程序单元的每一次激活,都应在内存中建立相应的活动记录。2.1 活动记录的内容(1)返回地址(2)动态连接(3)静态连接(4)现场保护(5)参数区(6)变量区变量区变量区变量区参数区现场保护静态连接动态连接返回地址2.2 活动记录的特点除了变量存储区外,其余部分存储长度编译时可以确定,所以变量 i 的地址可用下式表示:D+offset(i)其中,D是活动记录的首地址;offset(i)是变量 i 在活动记录中的位移。2.3 变量的类型1)静态变量编译时可以确
3、定活动记录的首地址D和变量的相对位置offset(i)。不管在程序单元的哪一次激活中,变量的存储位置均为:D+offset(i)。2)半静态变量编译时可确定变量i的相对位置offset(i),单元激活时可确定活动记录的首地址D。则每一次激活,变量对应一个不同的存储位置:D+offset(i)。3)半动态变量编译时不能确定变量 i 的相对位置offset(i),但能确定 i 的存储格式。可在活动记录中为 i 建立一个描述符,用于记录 i 在内存中的存储格式,并在描述符中建立一个指针域,用于记录 i 在运行时的具体存储地址。例:动态数组 int a1.m;int b1.m1.n;4)动态变量编译时
4、不能确定变量 i 的相对位置offset(i),也不能确定 i 的存储格式。即描述符需要到运行时才能确定,因此可在活动记录中为 i 设置两个指针,一个记录运行时描述符的地址,另一个记录运行时 i 的地址。例:某些语言中类型可变的变量;某些语言中维数可变的数组。4.存储分配模式4.1 静态分配n 可用于静态变量的分配,变量与存储区域的绑定关系在编译时便可建立,并完成存储分配;n 不允许递归调用,不允许动态数组,不允许动态类型的数据对象。4.2 栈式分配n 用栈分配活动记录;n 各程序单元之间的调用遵循“后进先出”模式;n 活动记录的建立和撤消也满足“后进先出”模式;n 分配方法:当一个程序单元被
5、激活时,在栈顶分配其活动记录;当程序单元退出时,在栈顶将其活动记录撤销。例子:某程序中各程序单元的调用顺序为:P运行P调用QQ调用RR退出Q退出P退出P的活动记录Q的活动记录R的活动记录.4.3 堆分配由于动态变量的首地址、长度、类型等在编译时无法确定,在执行过程中也可能改变,所以不可能在栈上为这样的对象分配存储区。对于这些变量,必须分配在堆上。例如:C中通过malloc分配的变量;某些语言中的动态变量等。4.4 存储空间的组织代码代码静态数据静态数据栈栈堆堆第二节 栈式分配1.半静态变量的栈式分配1.1 特点n 变量及活动记录的长度都可静态确定;n 一个程序单元可能被多次激活,活动记录是在程
6、序单元激活时动态建立,并与代码段建立联系的。1.2 处理方法(1)设置当前栈指针current,表示当前活动记录的开始位置(活动记录首地址D);(2)指针free表示数据存储器下一个可用单元;(3)变量绑定于它在活动记录中的常数位移 i,变量通过current变址访问;(4)A调用B时,在A活动记录的栈顶之上建立B的当前实例的活动记录;(5)从B返回时,释放其活动记录。1.3 动态连接和动态链n 动态连接:A调用B时,B的活动记录中保存的A的活动记录地址。n 动态链:由动态连接组成的一个调用链。AEFGF例:例:A call E;E call F;F call G;G call F;.1.4
7、CALL P的翻译(1)D free :=ip+5(保存返回地址)(2)Dfree+1:=current(保存current)(3)current:=free(建立新的current)(4)free:=free+L(调整free)(5)ip:=P(转移到P)例子:过程A调用过程P返回地址动态连接返回地址动态连接A的活动记录P的活动记录currentfreefreecurrentcurrentcurrent1.5 RETURN语句的翻译(1)恢复freefree:=current(2)恢复主调过程的currentcurrent:=Dcurrent+1(3)返回ip:=Dfree返回地址动态连接返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运行 存储空间 组织 课件 ehxn
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内