欢迎来到天天文库
浏览记录
ID:57022032
大小:78.00 KB
页数:24页
时间:2020-07-26
《目标程序运行时的存储组织ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章目标程序运行时的存储组织学习目标:掌握:参数传递的几种方式理解:静态存储分配、栈式动态存储分配、堆式动态存储分配的基本思想目标程序运行时的存储组织存储分配是在运行阶段进行的;但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来;运行阶段,随着目标代码的运行,数据的存储组织形式便得以实现。目标程序运行时的存储组织要解决的问题:把静态的源程序与程序运行时的动态活动联系起来,即运行中的程序信息是如何进行存储和访问的。在程序执行过程中,程序中数据的存取是通过对应的存储单元来进行的存储组织就是要在编译阶段为源程序中出现的用户定义的变量与常量、临时工作单元
2、、过程或函数调用时需要的连接单元与返回地址等分配其在运行阶段的存储空间10.1运行时的存储空间结构10.2运行时的存储空间分配10.3参数传递10.1运行时的存储空间结构当程序运行时,存储区的内容包括:目标代码目标代码的大小在编译时可以静态确定,因此可以把它放在静态确定的区域;目标代码运行时的数据空间数据空间包括:用户定义的各种类型的数据对象;临时工作单元;输入/输出缓冲区等数据空间有三种组织形式:静态数据区、栈区和堆区目标代码区静态数据区栈区堆区目标代码区(code);静态数据区(staticdata):用于存放编译时能确定所占用空间的数据,如全局变量和静态变量堆栈区(stackand
3、heap):用于存放编译时不能确定所占用空间的数据,如可变数据以及管理过程活动的控制信息运行时的存储空间结构如下:自由空间10.2运行时的存储空间分配影响分配策略的因素:源语言的结构特点源语言的数据类型源语言中决定名字作用域的规则编译器具体实现时,采用如下三种分配策略之一或三种的混合形式。这三种方式是:静态存储分配栈式动态存储分配堆式动态存储分配10.2.1静态存储分配指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。由静态存储分配产生的数据区称为静态数据区。静态存储分配适用于不
4、允许递归过程或递归调用,不允许可变体积的数据结构的语言静态存储分配的特点:简单、易于实现例:FORTRAN语言,它所有的数据都属于这一类。例:FORTRAN程序主程序段ProgramCNSUME……子程序段CharacterfunctionPRDUCE()……PRDUCE的数据区CNSUME的数据区PRDUCE的目标代码CNSUME的目标代码代码区静态数据区10.2.2动态存储分配指在运行阶段动态地为源程序中的数据对象分配存储位置实行动态存储分配的语言的特点:允许递归过程允许可变数据结构(可变数组或记录等)允许用户自由申请和释放空间这种程序在编译时无法确定运行时所需数据空间的大小,需待程
5、序运行时动态确定有两种动态存储分配方式:栈式(stack)、堆式(heap)。10.2.3栈式动态存储分配在数据空间中开辟一个栈区,每当调用一个过程时,它所需要的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。空间的使用符合先借后还的原则。特点:先借后还,管理简单,空间使用效率高栈式动态存储分配适合于PASCAL、C等典型过程式语言。Programmain;全局变量定义;ProcedureR;…End(R);ProcedureQ;…End(Q);主程序执行体End.(main)若主程序调用Q,Q递归调用自己,在Q第二次进入运行后的存储结构为:Q的数据区Q的数据区主程序全局数据区
6、代码区栈区10.2.4堆式动态存储分配在数据空间中开辟一片连续的存储区(通常叫做堆),每当需要时就从这片空间借用一块,不用时再退还。借用与归还未必服从“先借后还”的原则。堆式动态存储分配适合于用户可以自由申请和归还数据空间的语言,如C++。特点:适用范围广,容易出现碎片。如何充分利用空间是个难题。作为存储分配组织的一个原则,能在编译时完成的存储分配尽量采用静态分配方案,避免目标程序中携带许多用于存储分配的指令,以提高目标代码的效率。10.3参数传递过程(函数)是结构化程序设计的主要手段,同时也是节省程序代码和扩充语言能力的主要途径。当一个过程调用其他过程时,调用与被调用之间的通信或者通过
7、全局量,或者由参数传递。掌握编译器使用的参数传递的方法很重要,它们直接影响程序运行的结果。过程定义procedureSWAP(n,m:real);varj:real;beginj:=n;n:=m;m:=jend;参数传递的例子:主程序i:=5;k[i]:=6;SWAP(i,k[i]);过程调用…1.参数参数过程定义中的参数称为形式参数,简称形参。过程调用中的参数称为实在参数,简称实参。实参可以是变量、常量或较复杂的表达式,应与相应的
此文档下载收益归作者所有