- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 目标程序运行时的组织;10.1 概述;存储管理复杂度取决于源语言本身,具体包括:
允许的数据类型的多少?
语言中允许的数据项是: 静态确定?动态确定?
程序决定名字的作用域的规则和结构
段结构?
过程定义不嵌套?只允许过程递归调用?
分程序结构: 分程序嵌套?过程定义嵌套? ; 目标代码区
静态数据区
Stack
heap
;2、存储分配策略:
(1)静态存储分配——在编译时能确定目标程序运行中所需的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的存储位置。;;(2)动态存储分配——在运行阶段动态地为源程序中的量分配存储空间。(栈式、堆式)
注:1)若某程序设计语言允许过程递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策略。
;;3、过程活动:一个过程的活动指的是该过程的一次执行。
4、活动记录(AR):一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录。此记录含有连接数据、形式单元、局部变量、局部数组的内情向量和临时工作单元等。
;对任何局部变量X的引用可表示为变址访问:
dx[SP]
dx: 变量X相对于活动记录起点的地址,在编译时可确定。;连接数据
返回地址
动态链:指向调用该过程的必威体育精装版活动记录地址的指针。
静态链:指向直接外层必威体育精装版活动记录地址的指针,用来访问非局部数据。;形式单元:存放相应的实参的地址或值。
局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。;临时单元
;
1、 call P 被翻译成:
1[TOP]:=SP (保护现行SP)
JSR P (转子指令);2、转进过程P后,首先应执行下述指令:
SP:=TOP+1 (定义新的SP)
1[SP]:=返回地址 (保护返回地址)
TOP:=TOP+L (新TOP)
L:过程P的活动记录所需单元数,
在编译时可确定。
;3、 过程返回时,应执行下列指令:
X:=2[TOP] (把返回地址取到X中)
TOP:=SP-1 (恢复调用前TOP)
SP:=0[SP] (恢复调用前SP)
UJ X (按X返回)
; 10.2 栈式存储??配的实现; 例:
Main( )
{
Main中的数据说明
}
proc R( )
{
R中的数据说明
}
…
proc Q( )
{
Q中的数据说明
};
R的数组区
R的活动记录
Q的活动记录
主程序全局
数据区;二、嵌套过程语言的栈式分配的实现
1、程序结构特点:语言的定义允许嵌套,一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)(如PASCAL语言) 。
如何才能引用外层数据?;;PASCAL
PASCAL程序本身可以看成是一个操作系统所调用的过程,过程可以嵌套和递归。
一个PASCAL过程:
过程头;
说明段(由一系列的说明语句组成);
begin
执行体(由一系列的执行语句组成);
end;作用域:一个名字能被使用的区域范围称作这个名字的作用域。
允许同一个标识符在不同的过程中代表不同的名字。
名字作用域规则--最近嵌套原则
一个在子程序B1中说明的名字X只在B1中有效(局部于B1);
如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效。如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X。;program main
var A, B : real;
…
procedure P1
var B:boolean;
…
begin
…
end
procedure P2
var A:integer;
…
begin
…
end
begin
…
end; 非局部名字的访问的实现 ;(1) 用静态链;;main
p1
p2
p3
p4 ;2、用Display表;说明:1、由于过程的层数可以静态确定,因此每个过程的Display表的体积在编译时即可以确定。
2、某过程p是在层次为i的过程q内定义的,并且q是包围p的直接外层,那么p的过程层数为i+1。
;pro
文档评论(0)