- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 运行时存储空间的组织和管理 ;一、数据的存储单元 编译程序必须为目标程序的运行分配数据的 存储单元。 如:变量、常量单元,临时工作单元,返回地址 若无存放数据信息的单元,则目标程序将无法运行。 二、存储单元分配策略 1、静态存储分配 在编译时就可以完全为数据项目分配存储单元,称为静态存储分配。 注:若一个程序设计语言不允许递归调用,而且不含有可变数组,则可使用静态存储分配策略。 ;2、动态存储分配 在运行时才能进行数据存储单元分配,称为动??存储分配。 注:1)若某程序设计语言允许过程递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策略。 2)动态分配数据单元时一般使用: 栈式存储分配 堆式存储分配;2、动态存储分配 (1)栈式存储分配 运行时,每进入一个过程,就在栈顶为该过程分配一块数据区,一旦退出该过程,它所占的空间也退还给系统。 (2)堆式存储分配 有些语言允许用户随时动态地申请和释放存储空间,但申请和释放之间不遵守先申请后释放或后申请先释放原则,故不能使用栈式存储分配,而是更复杂的动态分配策略。 这种策略是:让运行程序持有一个大的存区(堆),在申请时从堆中取一块,释放时将一块存储区退还给堆。;栈式存储管理 ;例如有如下程序: MAIN () {…… call Q( ); } P( ) {……} Q( ) {…… call P( ); };当P过程进入运行后,栈顶数据区有两个指针: SP指向现行过程数据区起点; TOP指向顶点 注:从数据区中引出指向主程序数据区的箭头表示外部变量引用关系。;3、活动记录: 包含连接数据、形式单元、局部变量、内情向量和临时工作单元等。 注:1)活动记录的建立是按照调用次序而累筑,而非排列次序; 2)栈顶活动记录数据区有两个指针SP和TOP,SP指向现行数据区起点,TOP指向顶点; 3)从数据区中引出指向主程序数据区的箭头表示外部变量引用关系; ;4)C语言的活动记录所含区段是:连接数据(包含老SP值(即前一活动记录的首地址;或称施调过程的数据区首地址)和返回地址(即调用语句的下一条指令的地址))、参数(形参)个数、形式单元(存放实参值或地址)、过程的局部变量(简单变量)、数组内情变量??临时工作单元。 5)过程中的局部变量(简单变量)在内存地址可表示为变址形式x[SP],其中SP为当前数据区首地址,用作变址值,x称为相对位移量。连接数据: 老SP值:前一活动记录的首地址(施调过程的数据区首址); 返回地址; ; 简单变量X在数据区内相对地址设为x,则,x的内存地址表示为变址形式x[SP],SP为当前数据区首址,x为相对位移量。 4、C语言的数据区建立与撤销 1)过程调用段: Call语句翻译成中间代码后所作操作有两个:将参数传递到过程或函数的数据区的形参单元中;跳转到过程或函数。 ;例如:call Q(T1,T2,…,Tn)语句的中间代码为: Par T1 … Par Tn Jsr n,Q 注:C语言的数据区 是由过程调用引起;2)过程进入段工作: 定义新活动记录的SP,保护返回地址和定义这个活动记录的TOP,即: SP:=TOP+1 1[SP]:=返回地址 TOP:=TOP+L /*L是过程Q的活动记录所需单元数*/;3)过程返回段 (1)假定此时E的值已经计算出来并已放在某临时单元T中,那么就将T值传送到某个特定的寄存器中,以备调用段获取(调用段将从此寄存器获得被调用过程的结果值); (2)恢复SP和TOP,以便回到调用段的数据区。 TOP:=SP-1;SP:=0[SP] (3)按返回地址回到调用语句的下一语句去继续运行。 X:=2[TOP];Jmp 0[X] 注:若是过程调用,则不必回送结果,其他相同。 ;二、嵌套过程语言的栈式存储管理 1、语言特点 既允许过程嵌套,也允许过程递归调用。 2、存储管理方式 1)根据嵌套过程语言的规定,由变量的最小作用域原则,一个过程可以引用包围它的任意外层过程所定义的变量和数组。所以,运行时过程必须知道它所有直系外层过程的必威体育精装版活动记录的地址。 2)由于
有哪些信誉好的足球投注网站
文档评论(0)