- 1、本文档共75页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 运行时存储空间组织 6.1 静态存储分配 6.2 简单的栈式存储分配 *6.3 嵌套过程语言的栈式实现 6.4 堆式动态存储分配 *6.5 参数传递补遗 序 补充:目标程序运行时的活动 1 过程的活动 我们可把过程式语言的源程序看作是由一组过程按某种规则组成。本节讨论一个过程的静态源程序和它的目标程序在运行时的活动之间的关系。一些相关概念: 过程:一个说明,把标识符和一段语句联系起来。 过程名:标识符; 过程体:一段语句; 过程调用:执行过程体 形参:过程定义中出现的具有特殊意义的标识符。 实参:过程调用中传递给被调用过程替代过程体中的形参的表达式。 活动: 过程的一次执行称作一次活动。 活动的生存期,指的是从执行活动的构成体第一步操作到最后一步操作之间的操作序列。 名字的作用域:名字在程序里起作用的范围。 活动记录 把过程的一个活动所需要的信息组织成一块连续的存储单元,称为活动记录。 一个活动所需要的信息的每个数据项有相同的生存期,因此,组织成一个活动记录是很自然的。 活动记录的一般内容: 运行时存储器的划分 6.1 静态存储分配 静态存储空间分配: 在编译时就确定一个程序在运行时所需的存储空间大小,安排好目标程序运行时的全部数据空间,并确定每个数据项的单元地址,这种存储空间分配方法叫做静态分配。 使用静态存储空间分配的高级语言FORTRAN特点: 不允许过程有递归性 每个变量的存储空间大小都是常量(即不允许含可变体积的数据,如可变数组) 所有数据名的性质是完全确定的(没指针类型,不允许动态分配内存)。确保整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配。 例:一个FORTRAN程序的运行时存储分配 分析: 过程调用不允许递归,运行时每个过程只有一个活动实例,可在编译时确定过程的活动记录地址,调用所使用的局部数据区,可以直接安排在过程的目标代码之后,并把各变量名字对应的存储地址填入相关的目标代码中,以便在过程运行时访问这个局部数据区。因此,FORTRAN过程的活动记录存放在静态数据区。 为了区分局部名和全局名,FORTRAN 77的运行时存储器的数据区又可分为局部数据区和全局数据区两大块。 6.2 简单的栈式存储分配 (1) 可采用栈式存储分配的语言的特点: 语言没有分程序结构,过程定义不允许嵌套。 允许过程的递归调用,允许过程含有可变数组。 C语言不允许含有可变数组,也是一种栈式存储分配语言。 注意:允许过程的递归调用意味着在运行时一个过程可能有多个活动实例,不能简单地给过程中地局部名字分配固定的存储单元,必须在过程被调用时动态地给过程活动记录分配存储单元。 C语言的程序结构如下: 全局数据说明 main() { main中的数据说明 } void R( ) { R中的数据说明 } void Q( ) { Q中的数据说明 } 例如,下面计算n!的C语言程序就是一个递归调用的程序,它的执行过程可以用栈来实现。 # include “stdio.h” long factorial (int n) { if (n1) return (n*factorial (n?1)); else return (1); } main ( ) { int num; do{ scanf (“%d” , num); if (num=0 num 15) printf (“%d\n”, factorial (num)); else printf (“error!\n”); }while (num=0); } 6.2.1 栈式存储分配与活动记录 栈式存储分配策略下的活动记录的建立和销毁: 使用栈式存储分配法意味着程序运行时,每当进入一个过程(或函数)就有一个相应的活动记录累筑于栈顶,此记录含有连接数据、形式单元、局部变量、局部数组的内情向量和临时工作单元等; 当一个过程工作完毕返回时,它在栈顶的活动记录随过程结束而被弹出,即不复存在。 注:含可变数组的过程数据需在活动记录的基础上增加一块数据块存放可变数组。 图6–2和图6–3分别给出了C语言和含可变数组的某简单语言程序运行时的数据空间结构,即显示了主程序在调用了过程Q,Q又调用了过程R,且在R投入运行后的存储结构。 C的活动记录含有以下几个区段(如图6–4所示): 连接数据(两项):老SP值(即前一活动记录的起始地址)和返回地址; (2) 参数个数; (3) 形式单元(存放实在参数的值或地址); (4) 过程的局部变量、数组的内情向量和临时工作单元。 C语言的过程局部变量或形参的存储单元地址计算: 由图6–4可知,过程
您可能关注的文档
最近下载
- JR_T 0237-2021 金融大数据平台总体技术要求.docx
- 江西省吉安市第一中学2024-2025学年高一上学期第一次月考语文(原卷版).docx VIP
- 《Q∕CR9603-2015-高速铁路桥涵工程施工技术规程》.pdf
- 黑龙江大学《概率论》2022-2023学年第一学期期末试卷.doc VIP
- 我国进口牛羊肉行业市场营销方案.docx
- 中国伦理学会德育研究会班主任工作研究中心成立大会主题报告.ppt
- 学校校长年终工作总结.docx VIP
- 报考职位及人数.doc
- 新人教版数学六年级上册全册课本练习题精心可编辑.doc VIP
- 2024秋国开《市场营销原理与实务》形考任务1-4参考答案.doc
文档评论(0)