欢迎来到天天文库
浏览记录
ID:68161230
大小:255.80 KB
页数:38页
时间:2021-09-30
《运行时存储空间的组织和管理.pptx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第九章运行时存储空间的组织和管理一、数据的存储单元编译程序必须为目标程序的运行分配数据的存储单元。如:变量、常量单元,临时工作单元,返回地址若无存放数据信息的单元,则目标程序将无法运行。二、存储单元分配策略1、静态存储分配在编译时就可以完全为数据项目分配存储单元,称为静态存储分配。注:若一个程序设计语言不允许递归调用,而且不含有可变数组,则可使用静态存储分配策略。2、动态存储分配在运行时才能进行数据存储单元分配,称为动态存储分配。注:1)若某程序设计语言允许过程递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策
2、略。2)动态分配数据单元时一般使用:栈式存储分配堆式存储分配2、动态存储分配(1)栈式存储分配运行时,每进入一个过程,就在栈顶为该过程分配一块数据区,一旦退出该过程,它所占的空间也退还给系统。(2)堆式存储分配有些语言允许用户随时动态地申请和释放存储空间,但申请和释放之间不遵守先申请后释放或后申请先释放原则,故不能使用栈式存储分配,而是更复杂的动态分配策略。这种策略是:让运行程序持有一个大的存区(堆),在申请时从堆中取一块,释放时将一块存储区退还给堆。栈式存储管理一、允许过程(函数)递归调用的数据存储管理1、语言特点允许过程(函数)的递归调用,但不允许定义嵌套的过
3、程(函数),也不许使用可变数组。如C语言。2、栈式存储分配:每进入一个过程,就有相应的数据区建立在栈顶。当程序开始运行前,用于建造数据区的栈是空栈。当开始进入主程序执行语句前,便在栈中建立全局变量和主程序数据区。在主程序中若有调用过程的语句时,便在栈顶累筑该过程的活动记录。在进入过程后执行过程的可执行语句前再把局部数组累筑于栈顶,若还有调用过程的语句就重复上述过程。例如有如下程序:MAIN(){……callQ();}P(){……}Q(){……callP();}当P过程进入运行后,栈顶数据区有两个指针:SP指向现行过程数据区起点;TOP指向顶点注:从数据区中引出指向
4、主程序数据区的箭头表示外部变量引用关系。3、活动记录:包含连接数据、形式单元、局部变量、内情向量和临时工作单元等。注:1)活动记录的建立是按照调用次序而累筑,而非排列次序;2)栈顶活动记录数据区有两个指针SP和TOP,SP指向现行数据区起点,TOP指向顶点;3)从数据区中引出指向主程序数据区的箭头表示外部变量引用关系;4)C语言的活动记录所含区段是:连接数据(包含老SP值(即前一活动记录的首地址;或称施调过程的数据区首地址)和返回地址(即调用语句的下一条指令的地址))、参数(形参)个数、形式单元(存放实参值或地址)、过程的局部变量(简单变量)、数组内情变量和临时工
5、作单元。5)过程中的局部变量(简单变量)在内存地址可表示为变址形式x[SP],其中SP为当前数据区首地址,用作变址值,x称为相对位移量。连接数据:老SP值:前一活动记录的首地址(施调过程的数据区首址);返回地址;简单变量X在数据区内相对地址设为x,则,x的内存地址表示为变址形式x[SP],SP为当前数据区首址,x为相对位移量。4、C语言的数据区建立与撤销1)过程调用段:Call语句翻译成中间代码后所作操作有两个:将参数传递到过程或函数的数据区的形参单元中;跳转到过程或函数。例如:callQ(T1,T2,…,Tn)语句的中间代码为:ParT1…ParTnJsrn,Q
6、注:C语言的数据区是由过程调用引起2)过程进入段工作:定义新活动记录的SP,保护返回地址和定义这个活动记录的TOP,即:SP:=TOP+11[SP]:=返回地址TOP:=TOP+L/*L是过程Q的活动记录所需单元数*/3)过程返回段(1)假定此时E的值已经计算出来并已放在某临时单元T中,那么就将T值传送到某个特定的寄存器中,以备调用段获取(调用段将从此寄存器获得被调用过程的结果值);(2)恢复SP和TOP,以便回到调用段的数据区。TOP:=SP-1;SP:=0[SP](3)按返回地址回到调用语句的下一语句去继续运行。X:=2[TOP];Jmp0[X]注:若是过程调
7、用,则不必回送结果,其他相同。二、嵌套过程语言的栈式存储管理1、语言特点既允许过程嵌套,也允许过程递归调用。2、存储管理方式1)根据嵌套过程语言的规定,由变量的最小作用域原则,一个过程可以引用包围它的任意外层过程所定义的变量和数组。所以,运行时过程必须知道它所有直系外层过程的最新活动记录的地址。2)由于允许递归,过程活动记录的位置是动态变化的。因此,每个活动记录中必须设法记住直系外层的最新活动记录的位置,以处理递归。3、解决方案使用层次显示表display1)内容:每进入一个过程,在建立其活动记录区的同时,为它建立一张层次显示表,以登记它所有直系外层最新活动记录的
8、首址和本过
此文档下载收益归作者所有