第08章 程序运行时的存储组织及管理bdfo.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第08章 程序运行时的存储组织及管理bdfo.pptx》由会员分享,可在线阅读,更多相关《第08章 程序运行时的存储组织及管理bdfo.pptx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理基础编译原理基础1S.PO.P语义分析、生成中间代码语义分析、生成中间代码生成目标程序生成目标程序代码优化代码优化语法分析程序语法分析程序词法分析程序词法分析程序错错误误处处理理符符号号表表管管理理编译程序在编译阶段要为源程序中出现的变量、常量等组编译程序在编译阶段要为源程序中出现的变量、常量等组织好在织好在运行阶段的存储空间运行阶段的存储空间将这种组织形式通过生成的将这种组织形式通过生成的目标代码目标代码体现出来体现出来为运行阶段实现存储为运行阶段实现存储奠定基础奠定基础2第八章第八章 程序运行时的存储组程序运行时的存储组织及管理织及管理 教学目标教学目标1.1.要求明确静态存储分配
2、和动态存储分配的要求明确静态存储分配和动态存储分配的含义含义2.2.了解栈式动态存储分配和活动记录的含义了解栈式动态存储分配和活动记录的含义及组成及组成3.3.了解堆式动态存储分配的分配方式和管理了解堆式动态存储分配的分配方式和管理技术技术38.1 8.1 程序运行时的存储组织程序运行时的存储组织8.2 8.2 静态存储分配静态存储分配8.3 8.3 栈式动态存储分配栈式动态存储分配8.4 8.4 堆式动态存储分配堆式动态存储分配教学内容教学内容48.1 程序运行时的存储组织程序运行时的存储组织 运行时存储空间的划分运行时存储空间的划分代码空间代码空间数据空间数据空间目标代码区目标代码区静态数
3、据区静态数据区运行栈区运行栈区 运行堆区运行堆区5存储分配策略存储分配策略p目标代码的长度在编译时就可确定目标代码的长度在编译时就可确定目标代码的长度在编译时就可确定目标代码的长度在编译时就可确定,可放在可放在可放在可放在静态区静态区静态区静态区内内内内;p对于在编译时已知大小的数据对象对于在编译时已知大小的数据对象对于在编译时已知大小的数据对象对于在编译时已知大小的数据对象(如如如如常量常量常量常量,全局变量全局变量全局变量全局变量,静态变量静态变量静态变量静态变量等等等等等等等等),),也可放在也可放在也可放在也可放在静态区静态区静态区静态区内内内内;p为提高运行效率为提高运行效率为提高运
4、行效率为提高运行效率,应尽可能多地分配应尽可能多地分配应尽可能多地分配应尽可能多地分配静态数据空间静态数据空间静态数据空间静态数据空间。FORTRAN,BASICFORTRAN,BASIC的分配一般可全部放在的分配一般可全部放在的分配一般可全部放在的分配一般可全部放在静态区静态区静态区静态区内内内内.p像像像像PASCAL,CPASCAL,C这类语言的实现这类语言的实现这类语言的实现这类语言的实现,由于子程序允许由于子程序允许由于子程序允许由于子程序允许递归递归递归递归地调用地调用地调用地调用,因此应用一因此应用一因此应用一因此应用一数据栈数据栈数据栈数据栈来动态地管理内存分配来动态地管理内存
5、分配来动态地管理内存分配来动态地管理内存分配.p另外另外另外另外PASCALPASCAL和和和和C C还允许还允许还允许还允许动态地申请动态地申请动态地申请动态地申请的内存的内存的内存的内存,这种数这种数这种数这种数据的空间可由据的空间可由据的空间可由据的空间可由堆式分配堆式分配堆式分配堆式分配实现实现实现实现.6活动记录(活动记录(active record)pp执行过程时所需进行的信执行过程时所需进行的信执行过程时所需进行的信执行过程时所需进行的信息管理,是通过息管理,是通过息管理,是通过息管理,是通过活动记录活动记录活动记录活动记录实现的,实现的,实现的,实现的,活动记录活动记录活动记录
6、活动记录连续存连续存连续存连续存储在块中,其内容见右图。储在块中,其内容见右图。储在块中,其内容见右图。储在块中,其内容见右图。pp以过程为单位的动态存储以过程为单位的动态存储以过程为单位的动态存储以过程为单位的动态存储分配方案:分配方案:分配方案:分配方案:n n当一过程被调用时,就当一过程被调用时,就当一过程被调用时,就当一过程被调用时,就把其把其把其把其活动记录活动记录活动记录活动记录压入运行压入运行压入运行压入运行时存储栈顶,返回时弹时存储栈顶,返回时弹时存储栈顶,返回时弹时存储栈顶,返回时弹出之。出之。出之。出之。临时变量临时变量 内情向量内情向量 形式单元形式单元 动态链动态链 返
7、回地址返回地址 静态链静态链 局部变量局部变量 连接连接数据区数据区 局部局部数据区数据区 SP TOP78.2 静态存储分配静态存储分配 pp若在编译阶段就能确定源程序中各个数据实若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的体的存储空间大小,则可以采用较简单的静静态存储管理。态存储管理。pp采用静态存储分配的语言必须满足下列条件:采用静态存储分配的语言必须满足下列条件:采用静态存储分配的语言必须满足下列条件:采用静态存储分配的语言必须满足下列条件:1 1 1 1)不允许过程有递归调用。不允许过程有递归调用。不允许过程有递归调用。不允许过程有递归调用。2 2 2
8、2)不允许有可变大小的数据项,如可变数组或可不允许有可变大小的数据项,如可变数组或可不允许有可变大小的数据项,如可变数组或可不允许有可变大小的数据项,如可变数组或可变字符串。变字符串。变字符串。变字符串。3 3 3 3)不允许用户动态建立数据实体。不允许用户动态建立数据实体。不允许用户动态建立数据实体。不允许用户动态建立数据实体。满足上述条件的语言有满足上述条件的语言有FORTRANFORTRAN、BASICBASIC等。等。88.2 静态存储分配静态存储分配右下图是一个右下图是一个右下图是一个右下图是一个FORTRANFORTRAN程序模块在采用静态存储程序模块在采用静态存储程序模块在采用静
9、态存储程序模块在采用静态存储分配策略时的典型数据区格局。分配策略时的典型数据区格局。分配策略时的典型数据区格局。分配策略时的典型数据区格局。隐式参数隐式参数隐式参数隐式参数(返回地址、寄(返回地址、寄(返回地址、寄(返回地址、寄存器内容等)存器内容等)存器内容等)存器内容等)形式参数形式参数形式参数形式参数简单变量简单变量简单变量简单变量数组数组数组数组临时变量临时变量临时变量临时变量1)1)隐隐式式参参数数主主要要用用于于和和主主调调模模块块的的通通讯讯,在在一一般般情情况况下下这这个个参参数数可可以以是是主主调调过过程程的的返返回回地地址址,或或在在不不能能利利用用寄寄存存器器返返回回函函
10、数数值值时时传传回回函函数数返返回回值值。这这些些信信息息不不会会在在程程序序中中明明显显地出现,所以称为隐式参数。地出现,所以称为隐式参数。2)2)形形式式参参数数部部分分存存放放相相应应实实在在参参数数的的地地址址或或值。值。3)3)程程序序变变量量部部分分将将作作为为简简单单变变量量、数数组组、记记录录以以及及编编译译程程序序所所产产生生的的临临时时变变量量的的存存储储空空间。间。9静态存储分配静态存储分配动态存储分配动态存储分配静态存储分配静态存储分配在在在在编译阶段编译阶段编译阶段编译阶段由由由由编译程序编译程序编译程序编译程序实现对存储空间的管理,为源实现对存储空间的管理,为源实现
11、对存储空间的管理,为源实现对存储空间的管理,为源程序中的变量分配存储单元。程序中的变量分配存储单元。程序中的变量分配存储单元。程序中的变量分配存储单元。在编译时能够确定变量在运行时的数据空间大小在编译时能够确定变量在运行时的数据空间大小在编译时能够确定变量在运行时的数据空间大小在编译时能够确定变量在运行时的数据空间大小运行时不改变运行时不改变运行时不改变运行时不改变动态存储分配动态存储分配在目标程序在目标程序在目标程序在目标程序运行阶段运行阶段运行阶段运行阶段由由由由目标程序目标程序目标程序目标程序实现对存储空间的组实现对存储空间的组实现对存储空间的组实现对存储空间的组织与管理,为源程序中的变
12、量分配存储单元。织与管理,为源程序中的变量分配存储单元。织与管理,为源程序中的变量分配存储单元。织与管理,为源程序中的变量分配存储单元。在目标程序运行时进行分配在目标程序运行时进行分配在目标程序运行时进行分配在目标程序运行时进行分配 编译时为运行阶段设计好存储组织形式,即为每个编译时为运行阶段设计好存储组织形式,即为每个编译时为运行阶段设计好存储组织形式,即为每个编译时为运行阶段设计好存储组织形式,即为每个数据项安排好它在数据区中的相对位置数据项安排好它在数据区中的相对位置数据项安排好它在数据区中的相对位置数据项安排好它在数据区中的相对位置108.3 栈式动态存储分配栈式动态存储分配 p栈式分
13、配栈式分配栈式分配栈式分配适用于允许递归调用的程序设计语言适用于允许递归调用的程序设计语言适用于允许递归调用的程序设计语言适用于允许递归调用的程序设计语言;p引入一运行栈引入一运行栈引入一运行栈引入一运行栈,每调用一次过程每调用一次过程每调用一次过程每调用一次过程,就把该过程的相就把该过程的相就把该过程的相就把该过程的相应调用记录压入栈应调用记录压入栈应调用记录压入栈应调用记录压入栈,过程执行完毕后再将其弹出栈过程执行完毕后再将其弹出栈过程执行完毕后再将其弹出栈过程执行完毕后再将其弹出栈;进入时:进入时:进入时:进入时:在栈顶为其分配一个数据区在栈顶为其分配一个数据区在栈顶为其分配一个数据区在
14、栈顶为其分配一个数据区退出时退出时退出时退出时:撤消过程数据区:撤消过程数据区:撤消过程数据区:撤消过程数据区动作:动作:动作:动作:1)1)申请申请申请申请2)2)释放释放释放释放3)3)嵌套调用嵌套调用嵌套调用嵌套调用11下下面面我我们们通通过过一一段段C C程程序序的的运运行行来来说说明明运运行行栈栈的的变变化化情情况况。设设有有C C程序如下:程序如下:realx;块块1intm1(intind)块块2intx;x=m2(ind+1);intm2(intj)块块3intf10;块块4booltest1;main()块块5intx;x=2;printf(%dn,m1(x/5);块块块块4
15、 4数据区数据区数据区数据区 块块块块3 3数据区数据区数据区数据区 块块块块2 2数据区数据区数据区数据区 块块块块5 5数据区数据区数据区数据区 块块块块1 1数据区数据区数据区数据区 块块块块3 3数据区数据区数据区数据区 块块块块2 2数据区数据区数据区数据区 块块块块5 5数据区数据区数据区数据区 块块块块1 1数据区数据区数据区数据区 块块块块2 2数据区数据区数据区数据区 块块块块5 5数据区数据区数据区数据区 块块块块1 1数据区数据区数据区数据区 块块块块5 5数据区数据区数据区数据区 块块块块1 1数据区数据区数据区数据区 块块块块1 1数据区数据区数据区数据区 (a)(b
16、)(c)(d)(e)121 1、参数区参数区 参数区保存的内容包括:1)隐式参数隐式参数:隐式参数常包含下列几项:返回地址:主调程序中调用语句的下一条可执行语句的地址。指向前一个活动记录起始位置的指针:该基地址指针存放该模块的主调模块的活动记录的基地址,用于确保控制返回主调过程时,能使运行环境恢复到调用前的格局。函数返回值:有的隐式参数区包含此项,有的不包括,还有更好的处理返回值的方法。2)显式参数显式参数:显式参数区是形式参数的通讯区。形式参数的传递有传值、传地址、传名等方法。有些语言如PASCAL语言即可传值、也可传地址。C语言采用的是传值的方式,这种参数传递方法,实在参数的值将赋给形式参
17、数。当程序运行进入一个程序块时,就要在运行栈中为当程序运行进入一个程序块时,就要在运行栈中为此程序块添加一个活动记录。活动记录中除了存储此程序块添加一个活动记录。活动记录中除了存储局部变量外,还包括一个参数区和一个局部变量外,还包括一个参数区和一个displaydisplay区。区。图图8.38.3表示了一个典型的活动记录的概貌。表示了一个典型的活动记录的概貌。参数区参数区参数区参数区 局部数据局部数据局部数据局部数据 DISPLAYDISPLAY132 2 2 2、DisplayDisplayDisplayDisplay(嵌套(嵌套(嵌套(嵌套层层层层次次次次显显显显示表)区示表)区示表)区
18、示表)区displaydisplaydisplaydisplay区用于保存区用于保存区用于保存区用于保存对对对对当前正在当前正在当前正在当前正在执执执执行的模行的模行的模行的模块块块块来来来来说说说说是全局的程序是全局的程序是全局的程序是全局的程序变变变变量区的信息,它由一量区的信息,它由一量区的信息,它由一量区的信息,它由一系列地址指系列地址指系列地址指系列地址指针针针针所所所所组组组组成,每一个指成,每一个指成,每一个指成,每一个指针针针针指向一指向一指向一指向一个程序个程序个程序个程序块块块块的活的活的活的活动记录动记录动记录动记录的开始位置,而的开始位置,而的开始位置,而的开始位置,而
19、这这这这个个个个程序程序程序程序块对块对块对块对于当前正在于当前正在于当前正在于当前正在执执执执行的程序行的程序行的程序行的程序块块块块来来来来说说说说是是是是全局的。全局的。全局的。全局的。参数区参数区参数区参数区 局部数据局部数据局部数据局部数据 DISPLAYDISPLAYP P的活动纪录的地址的活动纪录的地址的活动纪录的地址的活动纪录的地址QQ的最新活动纪录的地址的最新活动纪录的地址的最新活动纪录的地址的最新活动纪录的地址RR的现行活动纪录地址的现行活动纪录地址的现行活动纪录地址的现行活动纪录地址210例如,令过程例如,令过程R R的外层为的外层为Q Q,Q Q的外层为的外层为P P,
20、则过程,则过程R R运行运行时时displaydisplay表的内容应为:表的内容应为:14图图8.48.4给出了图给出了图8.2(e)8.2(e)的运行的运行栈中各活动记录的内容。栈中各活动记录的内容。块块4 4的活动记录如下:的活动记录如下:DISPLAYDISPLAY区:区:指针指针d1d1和和d2d2,分,分别指向全局变量区的地址别指向全局变量区的地址Abp0Abp0和和Abp3Abp3。隐式参数区:隐式参数区:有两个参数,第有两个参数,第一个是返回地址,因块一个是返回地址,因块4 4不是不是一个独立的函数,是一嵌套的一个独立的函数,是一嵌套的块程序,所以,没有返回地址,块程序,所以,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第08章 程序运行时的存储组织及管理bdfo 08 程序 运行 存储 组织 管理 bdfo
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内