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

上传人:b****2 文档编号:2649041 上传时间:2022-11-05 格式:PPT 页数:24 大小:99.50KB
下载 相关 举报
第十章目标程序运行时的存储组织.ppt_第1页
第1页 / 共24页
第十章目标程序运行时的存储组织.ppt_第2页
第2页 / 共24页
第十章目标程序运行时的存储组织.ppt_第3页
第3页 / 共24页
第十章目标程序运行时的存储组织.ppt_第4页
第4页 / 共24页
第十章目标程序运行时的存储组织.ppt_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

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

《第十章目标程序运行时的存储组织.ppt》由会员分享,可在线阅读,更多相关《第十章目标程序运行时的存储组织.ppt(24页珍藏版)》请在冰豆网上搜索。

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

第第10章章目标程序运行时的存储组织目标程序运行时的存储组织学习目标:

学习目标:

v掌握:

掌握:

参数传递的几种方式参数传递的几种方式v理解:

理解:

静静态态存存储储分分配配、栈栈式式动动态态存存储储分分配配、堆式动态存储分配的基本思想堆式动态存储分配的基本思想目标程序运行时的存储组织目标程序运行时的存储组织存储分配是在运行阶段进行的;存储分配是在运行阶段进行的;但编译程序在编译阶段要为其设计好存储组织但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码形式,并将这种组织形式通过生成的目标代码体现出来;体现出来;运行阶段,随着目标代码的运行,数据的存储运行阶段,随着目标代码的运行,数据的存储组织形式便得以实现。

组织形式便得以实现。

目标程序运行时的存储组织要解决的问题:

目标程序运行时的存储组织要解决的问题:

把把静态的源程序静态的源程序与程序运行时的与程序运行时的动态活动动态活动联联系起来,即运行中的程序信息是如何进行存系起来,即运行中的程序信息是如何进行存储和访问的。

储和访问的。

在程序执行过程中,程序中数据的存取是通在程序执行过程中,程序中数据的存取是通过对应的存储单元来进行的过对应的存储单元来进行的存储组织就是要在编译阶段为源程序中出现存储组织就是要在编译阶段为源程序中出现的用户定义的变量与常量、临时工作单元、的用户定义的变量与常量、临时工作单元、过程或函数调用时需要的连接单元与返回地过程或函数调用时需要的连接单元与返回地址等分配其在运行阶段的存储空间址等分配其在运行阶段的存储空间10.1运行时的存储空间结构运行时的存储空间结构10.2运行时的存储空间分配运行时的存储空间分配10.3参数传递参数传递10.1运行时的存储空间结构运行时的存储空间结构当程序运行时,当程序运行时,存储区的内容包括:

存储区的内容包括:

目标代码目标代码目标代码的大小在编译时可以静态确定,因此目标代码的大小在编译时可以静态确定,因此可以把它放在静态确定的区域;可以把它放在静态确定的区域;目标代码运行时的数据空间目标代码运行时的数据空间v数据空间包括:

用户定义的各种类型的数据数据空间包括:

用户定义的各种类型的数据对象;临时工作单元;输入对象;临时工作单元;输入/输出缓冲区等输出缓冲区等v数据空间有三种组织形式:

静态数据区、栈数据空间有三种组织形式:

静态数据区、栈区和堆区区和堆区目标代码区目标代码区静态数据区静态数据区栈栈区区堆堆区区目标代码区(目标代码区(code););静态数据区(静态数据区(staticdata):

):

用用于存放编译时能确定所占用空间的于存放编译时能确定所占用空间的数据,如全局变量和静态变量数据,如全局变量和静态变量堆栈区(堆栈区(stackandheap):

):

用用于存放编译时不能确定所占用空间于存放编译时不能确定所占用空间的数据,如可变数据以及管理过程的数据,如可变数据以及管理过程活动的控制信息活动的控制信息运行时的存储空间结构如下:

运行时的存储空间结构如下:

自由空间自由空间10.2运行时的存储空间分配运行时的存储空间分配影响分配策略的因素:

影响分配策略的因素:

源语言的结构特点源语言的结构特点源语言的数据类型源语言的数据类型源语言中决定名字作用域的规则源语言中决定名字作用域的规则编译器具体实现时,采用如下三种分配策略之编译器具体实现时,采用如下三种分配策略之一或三种的混合形式。

这三种方式是:

一或三种的混合形式。

这三种方式是:

静态存储分配静态存储分配栈式动态存储分配栈式动态存储分配堆式动态存储分配堆式动态存储分配10.2.1静态存储分配静态存储分配指在编译时对数据对象分配固定的存储位置,指在编译时对数据对象分配固定的存储位置,运行时始终不变。

即一旦存储空间的某个位置运行时始终不变。

即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。

行过程中,此位置(地址)就属于该数据名。

由静态存储分配产生的数据区称为静态数据区。

由静态存储分配产生的数据区称为静态数据区。

静态存储分配适用于不允许递归过程或递归调静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言用,不允许可变体积的数据结构的语言静态存储分配的特点:

简单、易于实现静态存储分配的特点:

简单、易于实现例:

例:

FORTRAN语言,它所有的数据都属于这语言,它所有的数据都属于这一类。

一类。

例:

例:

FORTRAN程序程序主程序段主程序段ProgramCNSUME子程序段子程序段CharacterfunctionPRDUCE()PRDUCE的的数据区数据区CNSUME的的数据区数据区PRDUCE的的目标代码目标代码CNSUME的的目标代码目标代码代代码码区区静静态态数数据据区区10.2.2动态存储分配动态存储分配指指在在运运行行阶阶段段动动态态地地为为源源程程序序中中的的数数据据对对象象分分配存储位置配存储位置实行动态存储分配的语言的特点:

实行动态存储分配的语言的特点:

允许递归过程允许递归过程允许可变数据结构(可变数组或记录等)允许可变数据结构(可变数组或记录等)允许用户自由申请和释放空间允许用户自由申请和释放空间这这种种程程序序在在编编译译时时无无法法确确定定运运行行时时所所需需数数据据空空间的大小,需待程序运行时动态确定间的大小,需待程序运行时动态确定有有两两种种动动态态存存储储分分配配方方式式:

栈栈式式(stack)、堆堆式式(heap)。

10.2.3栈式动态存储分配栈式动态存储分配在在数数据据空空间间中中开开辟辟一一个个栈栈区区,每每当当调调用用一一个个过过程程时时,它它所所需需要要的的数数据据空空间间就就分分配配在在栈栈顶顶,每每当当过过程程工工作作结结束束时时就就释释放放这这部部分分空空间间。

空空间间的的使用符合先借后还的原则。

使用符合先借后还的原则。

特点:

先借后还,管理简单,空间使用效率高特点:

先借后还,管理简单,空间使用效率高栈栈式式动动态态存存储储分分配配适适合合于于PASCAL、C等等典典型型过程式语言。

过程式语言。

Programmain;全局变量定义全局变量定义;ProcedureR;End(R);ProcedureQ;End(Q);主程序执行体主程序执行体End.(main)若主程序调用若主程序调用Q,Q递归调用自己,递归调用自己,在在Q第二次进入运行后的存储结构第二次进入运行后的存储结构为:

为:

Q的数据区的数据区Q的数据区的数据区主程序全局主程序全局数据区数据区代码区代码区栈区栈区10.2.4堆式动态存储分配堆式动态存储分配在在数数据据空空间间中中开开辟辟一一片片连连续续的的存存储储区区(通通常常叫叫做做堆堆),每每当当需需要要时时就就从从这这片片空空间间借借用用一一块块,不不用用时时再再退退还还。

借借用用与与归归还还未未必必服服从从“先先借借后后还还”的原则。

的原则。

堆堆式式动动态态存存储储分分配配适适合合于于用用户户可可以以自自由由申申请请和和归还数据空间的语言,如归还数据空间的语言,如C+。

特点:

适用范围广,容易出现碎片。

特点:

适用范围广,容易出现碎片。

如何充分利用空间是个难题。

如何充分利用空间是个难题。

作为存储分配组织的一个原则,能在编译时完作为存储分配组织的一个原则,能在编译时完成的存储分配尽量采用静态分配方案,避免目成的存储分配尽量采用静态分配方案,避免目标程序中携带许多用于存储分配的指令,以提标程序中携带许多用于存储分配的指令,以提高目标代码的效率。

高目标代码的效率。

10.3参数传递参数传递过过程程(函函数数)是是结结构构化化程程序序设设计计的的主主要要手手段段,同同时时也也是是节节省省程程序序代代码码和和扩扩充充语语言言能能力力的的主主要要途途径。

径。

当当一一个个过过程程调调用用其其他他过过程程时时,调调用用与与被被调调用用之之间的通信或者通过全局量,或者由参数传递。

间的通信或者通过全局量,或者由参数传递。

掌掌握握编编译译器器使使用用的的参参数数传传递递的的方方法法很很重重要要,它它们直接影响程序运行的结果。

们直接影响程序运行的结果。

过程定义过程定义procedureSWAP(n,m:

real);varj:

real;beginj:

=n;n:

=m;m:

=jend;参数传递的例子:

参数传递的例子:

主程序主程序i:

=5;ki:

=6;SWAP(i,ki);过程调用过程调用1.参数参数参数参数过程定义中的参数称为形式参数,简称过程定义中的参数称为形式参数,简称形参形参。

过程调用中的参数称为实在参数,简称过程调用中的参数称为实在参数,简称实参实参。

实参可以是变量、常量或较复杂的表达式,实参可以是变量、常量或较复杂的表达式,应与相应的形参在性质上相容。

应与相应的形参在性质上相容。

参数传递常用的三种途径:

参数传递常用的三种途径:

传值传值(callbyvalue),也称值调用也称值调用传地址传地址(callbyreference),也称引用调也称引用调用用传名传名(callbyname),也称也称“换名换名”2.传值传值将实参的值计算出来,然后把它传给被调过程将实参的值计算出来,然后把它传给被调过程传值的实现:

传值的实现:

1.1.在被调过程的数据空间中为每个形参开辟一个在被调过程的数据空间中为每个形参开辟一个形式单元(形式单元(用以存放相应的实参值用以存放相应的实参值)。

)。

2.2.调用过程计算实参的值,并将其值放在对应的调用过程计算实参的值,并将其值放在对应的形式单元中。

形式单元中。

3.3.被调用过程执行时,被调用过程执行时,每当访问(引用或赋值)每当访问(引用或赋值)形参时都处理成对形式单元的直接访问。

形参时都处理成对形式单元的直接访问。

特点:

特点:

对形式参数的任何运算不影响调用过程中的实对形式参数的任何运算不影响调用过程中的实参的值参的值例例过程定义过程定义procedureSWAP(n,m:

real);varj:

real;beginj:

=n;n:

=m;m:

=jend;主程序主程序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_m65add_j被调用者数据区被调用者数据区add_nadd_m556add_j3.传地址传地址将指向实参存储位置的指针传给被调用过程将指向实参存储位置的指针传给被调用过程传地址的实现:

传地址的实现:

1.1.在被调过程的数据空间中为每个形参开辟一个在被调过程的数据空间中为每个形参开辟一个形式单元(形式单元(用以存放相应实参的地址用以存放相应实参的地址)。

)。

2.2.调用过程将实参的地址放在对应的形式单元中。

调用过程将实参的地址放在对应的形式单元中。

若实参是一个表达式(包括常数),例如若实参是一个表达式(包括常数),例如a+ba+b或或22,先对表达式求值,并将值存入某一位置,先对表达式求值,并将值存入某一位置,然后将该位置的地址放在形式单元中然后将该位置的地址放在形式单元中3.3.被调用过程执行时,被调用过程执行时,每当访问(引用或赋值)每当访问(引用或赋值)形参时都处理成对形式单元的间接访问。

形参时都处理成对形式单元的间接访问。

特点:

特点:

对形式参数的运算影响调用过程中的实参的值对形式参数的运算影响调用过程中的实参的值例例过程定义过程定义procedureSWAP(n,m:

real);varj:

real;beginj:

=n;n:

=m;m:

=jend;主程序主程序i:

=5;ki:

=6;SWAP(i,ki);过程调用过程调用过程调用时,有过程调用时,有(假设(假设i的地址为的地址为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

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

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