编译原理第六章运行时存储空间的组织和管理.ppt

上传人:b****2 文档编号:2123957 上传时间:2022-10-27 格式:PPT 页数:110 大小:904KB
下载 相关 举报
编译原理第六章运行时存储空间的组织和管理.ppt_第1页
第1页 / 共110页
编译原理第六章运行时存储空间的组织和管理.ppt_第2页
第2页 / 共110页
编译原理第六章运行时存储空间的组织和管理.ppt_第3页
第3页 / 共110页
编译原理第六章运行时存储空间的组织和管理.ppt_第4页
第4页 / 共110页
编译原理第六章运行时存储空间的组织和管理.ppt_第5页
第5页 / 共110页
点击查看更多>>
下载资源
资源描述

编译原理第六章运行时存储空间的组织和管理.ppt

《编译原理第六章运行时存储空间的组织和管理.ppt》由会员分享,可在线阅读,更多相关《编译原理第六章运行时存储空间的组织和管理.ppt(110页珍藏版)》请在冰豆网上搜索。

编译原理第六章运行时存储空间的组织和管理.ppt

第六章第六章运行时存储空间的组织和管理运行时存储空间的组织和管理术语术语过程的过程的活动活动过程的一次执行称为过程的一次活动过程的一次执行称为过程的一次活动活动记录活动记录过程的活动需要可执行代码和存放所需信息的存储空间过程的活动需要可执行代码和存放所需信息的存储空间,后者称为活动记录后者称为活动记录本章内容本章内容讨论一个活动记录中的数据布局讨论一个活动记录中的数据布局程序执行过程中,所有活动记录的组织方式程序执行过程中,所有活动记录的组织方式第六章第六章运行时存储空间的组织和管理运行时存储空间的组织和管理影响存储分配策略的语言特征影响存储分配策略的语言特征过程能否递归过程能否递归当控制从过程的活动返回时,局部变量的值是否要保留当控制从过程的活动返回时,局部变量的值是否要保留过程能否访问非局部变量过程能否访问非局部变量过程调用的参数传递方式过程调用的参数传递方式过程能否作为参数被传递过程能否作为参数被传递过程能否作为结果值传递过程能否作为结果值传递存储块能否在程序控制下动态地分配存储块能否在程序控制下动态地分配存储块是否必须显式地释放存储块是否必须显式地释放6.1局部存储分配局部存储分配6.1.1过程过程语言概念:

语言概念:

过程定义、过程定义、过程过程调用、形式参数、实在参调用、形式参数、实在参数、数、活动的活动的生存期生存期6.1局部存储分配局部存储分配6.1.2名字的作用域和绑定名字的作用域和绑定1、名字的作用域、名字的作用域一个声明起作用的程序部分称为该声明的一个声明起作用的程序部分称为该声明的作作用域用域6.1局部存储分配局部存储分配2、环境和状态、环境和状态环境把名字映射到左值,而状态把左值映射环境把名字映射到左值,而状态把左值映射到右值(即到右值(即名字到值有两步映射名字到值有两步映射)赋值改变状态,但不改变环境赋值改变状态,但不改变环境过程调用改变环境过程调用改变环境如果环境将名字如果环境将名字x映射到存储单元映射到存储单元s,则说则说x被被绑定绑定到到s名字名字存储单元存储单元状态状态值值环境环境6.1局部存储分配局部存储分配3、静态概念和动态概念的对应、静态概念和动态概念的对应静静态态概概念念动动态态对对应应过程的定义过程的定义过程的活动过程的活动6.1局部存储分配局部存储分配3、静态概念和动态概念的对应、静态概念和动态概念的对应静静态态概概念念动动态态对对应应过程的定义过程的定义过程的活动过程的活动名字的声明名字的声明名字的绑定名字的绑定6.1局部存储分配局部存储分配3、静态概念和动态概念的对应、静态概念和动态概念的对应静静态态概概念念动动态态对对应应过程的定义过程的定义过程的活动过程的活动名字的声明名字的声明名字的绑定名字的绑定声明的作用域声明的作用域绑定的生存期绑定的生存期6.1局部存储分配局部存储分配6.1.3活动记录活动记录活动记录的常见布局活动记录的常见布局返返回回值值临临时时数数据据参参数数控控制制链链访访问问链链机机器器状状态态局局部部数数据据6.1局部存储分配局部存储分配6.1.4局部数据的布局局部数据的布局字节是可编址内存的最小单位字节是可编址内存的最小单位一一个个过过程程所所声声明明的的局局部部变变量量,按按这这些些变变量量声声明明时时出出现的次序,在局部数据域中依次分配空间现的次序,在局部数据域中依次分配空间局局部部数数据据的的地地址址可可以以用用相相对对于于某某个个位位置置的的地地址址来来表表示示数据对象的存储布局还有一个数据对象的存储布局还有一个对齐问题对齐问题6.1局部存储分配局部存储分配例例在在SPARC/Solaris工工作作站站上上下下面面两两个个结结构构体体的的size分别是分别是24和和16,为什么不一样?

,为什么不一样?

typedefstruct_atypedefstruct_bcharc1;charc1;longi;charc2;charc2;longi;doublef;doublef;a;b;对齐:

对齐:

char:

1,long:

4,double:

86.1局部存储分配局部存储分配例例在在SPARC/Solaris工工作作站站上上下下面面两两个个结结构构体体的的size分别是分别是24和和16,为什么不一样?

,为什么不一样?

typedefstruct_atypedefstruct_bcharc1;0charc1;0longi;4charc2;1charc2;8longi;4doublef;16doublef;8a;b;对齐:

对齐:

char:

1,long:

4,double:

86.1局部存储分配局部存储分配例例在在X86/Linux机机器器的的结结果果和和SPARC/Solaris工工作作站不一样,是站不一样,是20和和16。

typedefstruct_atypedefstruct_bcharc1;0charc1;0longi;4charc2;1charc2;8longi;4doublef;12doublef;8a;b;对齐:

对齐:

char:

1,long:

4,double:

46.1局部存储分配局部存储分配6.1.5程序块程序块本身含有局部变量声明的语句本身含有局部变量声明的语句可以嵌套可以嵌套最接近的嵌套最接近的嵌套作用域规则作用域规则并列程序块不会同时活跃并列程序块不会同时活跃并列程序块的变量可以重叠分配并列程序块的变量可以重叠分配6.1局部存储分配局部存储分配main()/例例/beginofB0/inta=0;intb=0;/beginofB1/intb=1;/beginofB2/inta=2;/endofB2/beginofB3/intb=3;/endofB3/endofB1/endofB0/声声明明作作用用域域inta=0;B0B2intb=0;B0B1intb=1;B1B3inta=2;B2intb=3;B3a0b0b1a2,b3重叠分配存储单元重叠分配存储单元6.2全局栈式存储分配全局栈式存储分配本节介绍本节介绍描描述述过过程程的的目目标标代代码码怎怎样样访访问问绑绑定定到到局局部部名名字字的的存存储单元储单元介绍三种分配策略介绍三种分配策略静态分配策略静态分配策略栈式分配策略栈式分配策略堆式分配策略堆式分配策略6.2全局栈式存储分配全局栈式存储分配6.2.1运行时内存的划分运行时内存的划分代代码码静静态态数数据据堆堆栈栈6.2全局栈式存储分配全局栈式存储分配1、静态分配、静态分配名名字字在在程程序序被被编编译译时时绑绑定定到到存存储储单单元元,不不需需要运行时的任何支持要运行时的任何支持绑定的生存期是程序的整个运行期间绑定的生存期是程序的整个运行期间6.2全局栈式存储分配全局栈式存储分配2、静态分配给语言带来限制、静态分配给语言带来限制递归过程不被允许递归过程不被允许数数据据对对象象的的长长度度和和它它在在内内存存中中位位置置的的限限制制,必须是在编译时可以知道的必须是在编译时可以知道的数据结构不能动态建立数据结构不能动态建立6.2全局栈式存储分配全局栈式存储分配例例C程程序序的的外外部部变变量量、静静态态局局部部变变量量以以及及程程序中出现的常量都可以静态分配序中出现的常量都可以静态分配声明在函数外面声明在函数外面外部变量外部变量静态分配静态分配静态外部变量静态外部变量静态分配静态分配声明在函数里面声明在函数里面静态局部变量静态局部变量也是静态分配也是静态分配自动变量自动变量不能静态分配不能静态分配6.2全局栈式存储分配全局栈式存储分配6.2.2活动树和运行栈活动树和运行栈1、活动树、活动树用树来描绘控制进入和离开活动的方式用树来描绘控制进入和离开活动的方式mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)q(2,1)q(3,3)p(2,3)q(5,9)q(5,5)p(5,9)q(7,9)q(7,7)q(9,9)p(7,9)6.2全局栈式存储分配全局栈式存储分配活动树的特点活动树的特点每个结点代表某过程的一个活动每个结点代表某过程的一个活动根结点代表主程序的活动根结点代表主程序的活动结结点点a是是结结点点b的的父父结结点点,当当且且仅仅当当控控制制流流从从a的的活动进入活动进入b的活动的活动结结点点a处处于于结结点点b的的左左边边,当当且且仅仅当当a的的生生存存期期先先于于b的生存期的生存期6.2全局栈式存储分配全局栈式存储分配当前活跃着的过程活动可以保存在一个栈中当前活跃着的过程活动可以保存在一个栈中例例控制栈的内容:

控制栈的内容:

m,q(1,9),q(1,3),q(2,3)mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)q(2,1)q(3,3)p(2,3)q(5,9)q(5,5)p(5,9)q(7,9)q(7,7)q(9,9)p(7,9)6.2全局栈式存储分配全局栈式存储分配2、运运行行栈栈:

把把控控制制栈栈中中的的信信息息拓拓广广到到包包括括过过程程活动所需的所有局部信息(即活动记录)活动所需的所有局部信息(即活动记录)6.2全局栈式存储分配全局栈式存储分配2、运运行行栈栈:

把把控控制制栈栈中中的的信信息息拓拓广广到到包包括括过过程程活动所需的所有局部信息(即活动记录)活动所需的所有局部信息(即活动记录)ma:

arraym6.2全局栈式存储分配全局栈式存储分配2、运运行行栈栈:

把把控控制制栈栈中中的的信信息息拓拓广广到到包包括括过过程程活动所需的所有局部信息(即活动记录)活动所需的所有局部信息(即活动记录)mintira:

arraymr6.2全局栈式存储分配全局栈式存储分配2、运运行行栈栈:

把把控控制制栈栈中中的的信信息息拓拓广广到到包包括括过过程程活动所需的所有局部信息(即活动记录)活动所需的所有局部信息(即活动记录)mq(1,9)rmintiq(1,9)a:

arrayintm,n6.2全局栈式存储分配全局栈式存储分配2、运运行行栈栈:

把把控控制制栈栈中中的的信信息息拓拓广广到到包包括括过过程程活动所需的所有局部信息(即活动记录)活动所需的所有局部信息(即活动记录)mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(1,9)mintia:

arrayintm,nintm,nintiq(1,3)6.2全局栈式存储分配全局栈式存储分配6.2.3调用序列调用序列过程调用序列过程调用序列过程调用时执行的分配活动记录、把信息填入域中的代码过程调用时执行的分配活动记录、把信息填入域中的代码过程返回序列过程返回序列过过程程返返回回时时执执行行的的恢恢复复机机器器状状态态,释释放放活活动动记记录录,使使调调用用过过程能够继续执行的代码程能够继续执行的代码6.2全局栈式存储分配全局栈式存储分配即即使使是是同同一一种种语语言言,过过程程调调用用序序列列、返返回回序序列列和和活活动记录中各域的排放次序,也会因实现而异动记录中各域的排放次序,也会因实现而异设计这些序列和活动记录的原则设计这些序列和活动记录的原则调用者和被调用者交流的数据放在调用者和被调用者交流的数据放在活动记录开始处,并尽可能靠近调用活动记录开始处,并尽可能靠近调用者的活动记录者的活动记录固定长度的项放在活动记录中间。

固定长度的项放在活动记录中间。

在编译时不能及时知道大小的项目在编译时不能及时知道大小的项目放在活动记录末端放在活动记录末端返返回回值值临临时时数数据据参参数数控控制制链链访访问问链链机机器器状状态态局局部部数数据据6.2全局栈式存储分配全局栈式存储分配1、过程、过程p调用过程调用过程q的调用序列的调用序列返回值和参数返回值和参数top_spbase_sp临时数据局部数据临时数据局部数据控制链控制链和保存的机器状态和保存的机器状态6.2全局栈式存储分配全局栈式存储分配1、过程、过程p调用过程调用过程q的调用序列的调用序列

(1)p计算实参,依计算实参

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

当前位置:首页 > 考试认证 > IT认证

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

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