ImageVerifierCode 换一换
格式:PPT , 页数:24 ,大小:99.50KB ,
资源ID:2649041      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2649041.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第十章目标程序运行时的存储组织.ppt)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第十章目标程序运行时的存储组织.ppt

1、第第10章章 目标程序运行时的存储组织目标程序运行时的存储组织学习目标:学习目标:v掌握:掌握:参数传递的几种方式参数传递的几种方式v理解:理解:静静态态存存储储分分配配、栈栈式式动动态态存存储储分分配配、堆式动态存储分配的基本思想堆式动态存储分配的基本思想目标程序运行时的存储组织目标程序运行时的存储组织存储分配是在运行阶段进行的;存储分配是在运行阶段进行的;但编译程序在编译阶段要为其设计好存储组织但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码形式,并将这种组织形式通过生成的目标代码体现出来;体现出来;运行阶段,随着目标代码的运行,数据的存储运行阶段,随着目标

2、代码的运行,数据的存储组织形式便得以实现。组织形式便得以实现。目标程序运行时的存储组织要解决的问题:目标程序运行时的存储组织要解决的问题:把把静态的源程序静态的源程序与程序运行时的与程序运行时的动态活动动态活动联联系起来,即运行中的程序信息是如何进行存系起来,即运行中的程序信息是如何进行存储和访问的。储和访问的。在程序执行过程中,程序中数据的存取是通在程序执行过程中,程序中数据的存取是通过对应的存储单元来进行的过对应的存储单元来进行的存储组织就是要在编译阶段为源程序中出现存储组织就是要在编译阶段为源程序中出现的用户定义的变量与常量、临时工作单元、的用户定义的变量与常量、临时工作单元、过程或函数

3、调用时需要的连接单元与返回地过程或函数调用时需要的连接单元与返回地址等分配其在运行阶段的存储空间址等分配其在运行阶段的存储空间10.1 运行时的存储空间结构运行时的存储空间结构 10.2运行时的存储空间分配运行时的存储空间分配 10.3参数传递参数传递10.1 运行时的存储空间结构运行时的存储空间结构当程序运行时,当程序运行时,存储区的内容包括:存储区的内容包括:目标代码目标代码目标代码的大小在编译时可以静态确定,因此目标代码的大小在编译时可以静态确定,因此可以把它放在静态确定的区域;可以把它放在静态确定的区域;目标代码运行时的数据空间目标代码运行时的数据空间v数据空间包括:用户定义的各种类型

4、的数据数据空间包括:用户定义的各种类型的数据对象;临时工作单元;输入对象;临时工作单元;输入/输出缓冲区等输出缓冲区等v数据空间有三种组织形式:静态数据区、栈数据空间有三种组织形式:静态数据区、栈区和堆区区和堆区目标代码区目标代码区 静态数据区静态数据区栈栈区区堆堆区区目标代码区(目标代码区(code););静态数据区(静态数据区(static data):):用用于存放编译时能确定所占用空间的于存放编译时能确定所占用空间的数据,如全局变量和静态变量数据,如全局变量和静态变量堆栈区(堆栈区(stack and heap):):用用于存放编译时不能确定所占用空间于存放编译时不能确定所占用空间的数

5、据,如可变数据以及管理过程的数据,如可变数据以及管理过程活动的控制信息活动的控制信息运行时的存储空间结构如下:运行时的存储空间结构如下:自由空间自由空间10.2 运行时的存储空间分配运行时的存储空间分配影响分配策略的因素:影响分配策略的因素:源语言的结构特点源语言的结构特点源语言的数据类型源语言的数据类型源语言中决定名字作用域的规则源语言中决定名字作用域的规则编译器具体实现时,采用如下三种分配策略之编译器具体实现时,采用如下三种分配策略之一或三种的混合形式。这三种方式是:一或三种的混合形式。这三种方式是:静态存储分配静态存储分配栈式动态存储分配栈式动态存储分配堆式动态存储分配堆式动态存储分配1

6、0.2.1 静态存储分配静态存储分配指在编译时对数据对象分配固定的存储位置,指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。行过程中,此位置(地址)就属于该数据名。由静态存储分配产生的数据区称为静态数据区。由静态存储分配产生的数据区称为静态数据区。静态存储分配适用于不允许递归过程或递归调静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言用,不允许可变体积的数据结构的语言静态存储分配

7、的特点:简单、易于实现静态存储分配的特点:简单、易于实现例:例:FORTRAN语言,它所有的数据都属于这语言,它所有的数据都属于这一类。一类。例:例:FORTRAN程序程序主程序段主程序段Program CNSUME子程序段子程序段Character function PRDUCE()PRDUCE的的数据区数据区CNSUME的的数据区数据区PRDUCE的的目标代码目标代码CNSUME的的目标代码目标代码代代码码区区静静态态数数据据区区10.2.2 动态存储分配动态存储分配指指在在运运行行阶阶段段动动态态地地为为源源程程序序中中的的数数据据对对象象分分配存储位置配存储位置实行动态存储分配的语言的

8、特点:实行动态存储分配的语言的特点:允许递归过程允许递归过程允许可变数据结构(可变数组或记录等)允许可变数据结构(可变数组或记录等)允许用户自由申请和释放空间允许用户自由申请和释放空间这这种种程程序序在在编编译译时时无无法法确确定定运运行行时时所所需需数数据据空空间的大小,需待程序运行时动态确定间的大小,需待程序运行时动态确定有有两两种种动动态态存存储储分分配配方方式式:栈栈式式(stack)、堆堆式式(heap)。10.2.3 栈式动态存储分配栈式动态存储分配在在数数据据空空间间中中开开辟辟一一个个栈栈区区,每每当当调调用用一一个个过过程程时时,它它所所需需要要的的数数据据空空间间就就分分配

9、配在在栈栈顶顶,每每当当过过程程工工作作结结束束时时就就释释放放这这部部分分空空间间。空空间间的的使用符合先借后还的原则。使用符合先借后还的原则。特点:先借后还,管理简单,空间使用效率高特点:先借后还,管理简单,空间使用效率高栈栈式式动动态态存存储储分分配配适适合合于于PASCAL、C等等典典型型过程式语言。过程式语言。Program main;全局变量定义全局变量定义;Procedure R;End(R);Procedure Q;End(Q);主程序执行体主程序执行体End.(main)若主程序调用若主程序调用Q,Q递归调用自己,递归调用自己,在在Q第二次进入运行后的存储结构第二次进入运行后

10、的存储结构为:为:Q的数据区的数据区Q的数据区的数据区主程序全局主程序全局数据区数据区代码区代码区栈区栈区10.2.4 堆式动态存储分配堆式动态存储分配在在数数据据空空间间中中开开辟辟一一片片连连续续的的存存储储区区(通通常常叫叫做做堆堆),每每当当需需要要时时就就从从这这片片空空间间借借用用一一块块,不不用用时时再再退退还还。借借用用与与归归还还未未必必服服从从“先先借借后后还还”的原则。的原则。堆堆式式动动态态存存储储分分配配适适合合于于用用户户可可以以自自由由申申请请和和归还数据空间的语言,如归还数据空间的语言,如C+。特点:适用范围广,容易出现碎片。特点:适用范围广,容易出现碎片。如何

11、充分利用空间是个难题。如何充分利用空间是个难题。作为存储分配组织的一个原则,能在编译时完作为存储分配组织的一个原则,能在编译时完成的存储分配尽量采用静态分配方案,避免目成的存储分配尽量采用静态分配方案,避免目标程序中携带许多用于存储分配的指令,以提标程序中携带许多用于存储分配的指令,以提高目标代码的效率。高目标代码的效率。10.3 参数传递参数传递过过程程(函函数数)是是结结构构化化程程序序设设计计的的主主要要手手段段,同同时时也也是是节节省省程程序序代代码码和和扩扩充充语语言言能能力力的的主主要要途途径。径。当当一一个个过过程程调调用用其其他他过过程程时时,调调用用与与被被调调用用之之间的通

12、信或者通过全局量,或者由参数传递。间的通信或者通过全局量,或者由参数传递。掌掌握握编编译译器器使使用用的的参参数数传传递递的的方方法法很很重重要要,它它们直接影响程序运行的结果。们直接影响程序运行的结果。过程定义过程定义procedure SWAP(n,m:real);var j:real;begin j:=n;n:=m;m:=jend;参数传递的例子:参数传递的例子:主程序主程序i:=5;ki:=6;SWAP(i,ki);过程调用过程调用1.参数参数参数参数过程定义中的参数称为形式参数,简称过程定义中的参数称为形式参数,简称形参形参。过程调用中的参数称为实在参数,简称过程调用中的参数称为实在

13、参数,简称实参实参。实参可以是变量、常量或较复杂的表达式,实参可以是变量、常量或较复杂的表达式,应与相应的形参在性质上相容。应与相应的形参在性质上相容。参数传递常用的三种途径:参数传递常用的三种途径:传值传值(call by value),也称值调用也称值调用 传地址传地址(call by reference),也称引用调也称引用调用用 传名传名(call by name),也称也称“换名换名”2.传值传值将实参的值计算出来,然后把它传给被调过程将实参的值计算出来,然后把它传给被调过程传值的实现:传值的实现:1.1.在被调过程的数据空间中为每个形参开辟一个在被调过程的数据空间中为每个形参开辟一

14、个形式单元(形式单元(用以存放相应的实参值用以存放相应的实参值)。)。2.2.调用过程计算实参的值,并将其值放在对应的调用过程计算实参的值,并将其值放在对应的形式单元中。形式单元中。3.3.被调用过程执行时,被调用过程执行时,每当访问(引用或赋值)每当访问(引用或赋值)形参时都处理成对形式单元的直接访问。形参时都处理成对形式单元的直接访问。特点:特点:对形式参数的任何运算不影响调用过程中的实对形式参数的任何运算不影响调用过程中的实参的值参的值例例 过程定义过程定义 procedure SWAP(n,m:real);var j:real;begin j:=n;n:=m;m:=jend;主程序主程

15、序i:=5;ki:=6;SWAP(i,ki);过程调用过程调用过程调用时,有过程调用时,有(假设(假设i的地址为的地址为add_i)调用者数据区调用者数据区add_iadd_K565执行了语句执行了语句”j:=n;n:=m;m:=j”后后调用者数据区调用者数据区add_iadd_K565结果:结果:i=5,k5=6 不变,未交换不变,未交换被调用者数据区被调用者数据区add_nadd_m 65add_j被调用者数据区被调用者数据区add_nadd_m556add_j3.传地址传地址将指向实参存储位置的指针传给被调用过程将指向实参存储位置的指针传给被调用过程传地址的实现:传地址的实现:1.1.在

16、被调过程的数据空间中为每个形参开辟一个在被调过程的数据空间中为每个形参开辟一个形式单元(形式单元(用以存放相应实参的地址用以存放相应实参的地址)。)。2.2.调用过程将实参的地址放在对应的形式单元中。调用过程将实参的地址放在对应的形式单元中。若实参是一个表达式(包括常数),例如若实参是一个表达式(包括常数),例如a+ba+b或或2 2,先对表达式求值,并将值存入某一位置,先对表达式求值,并将值存入某一位置,然后将该位置的地址放在形式单元中然后将该位置的地址放在形式单元中3.3.被调用过程执行时,被调用过程执行时,每当访问(引用或赋值)每当访问(引用或赋值)形参时都处理成对形式单元的间接访问。形参时都处理成对形式单元的间接访问。特点:特点:对形式参数的运算影响调用过程中的实参的值对形式参数的运算影响调用过程中的实参的值例例 过程定义过程定义 procedure SWAP(n,m:real);var j:real;begin j:=n;n:=m;m:=jend;主程序主程序i:=5;ki:=6;SWAP(i,ki);过程调用过程调用过程调用时,有过程调用时,有(假设(假设i的地址为的地址为

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1