资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,*,*,6/20/2022,1,6/20/2022,1,Compiler,编 译 原 理,Monday,June 20,2022,第10章运行时的存储组织与分配,要求明确静态存储分配和动态存储分配的含义,明确,活动记录的含义及组成,了解静态、动态存储分配的策略,教学目标,S.P,O.P,语义分析、生成中间代码,生成目标程序,代码优化,语法分析程序,词法分析程序,错,误,处,理,符,号,表,管,理,编译程序在编译阶段要为源程序中出现的变量、常量等组织好在,运行阶段的存储空间,将这种组织形式通过生成的,目标代码,体现出来,为运行阶段实现存储,奠定基础,10.1 存储组织概述,10.2 静态存储分配,10.3 栈式动态存储分配,10.4 堆式动态存储分配,教学内容,10.1存储组织概述,运行时存储空间的划分,代码空间,数据空间,目标代码空间,静态数据空间,栈,自由空间,堆,过程的活动和活动记录,一个过程的,活动:,该过程的一次执行。,即每次执行一个过程体,就产生该过程的一个活动。,活动记录,:为了管理过程在一次执行中所需要的信息,使用一段连续的存储区,活动记录的结构,10.2静态存储分配,在,编译阶段,由,编译程序,实现对存储空间的管理,为,源程序中的变量分配存储单元。,条件,在,编译时能够确定,变量在运行时的数据空间大小,运行时不改变,FORTRAN程序的静态分配,动态存储分配,在目标程序,运行阶段,由,目标程序,实现对存,储空间的组织与管理,为源程序中的变量分配存储单元,特点,在目标程序,运行时进行分配,编译时为运行阶段,设计好存储组织形式,,即为每个数据项安排好它在数据区中的,相对位置,10.3栈式动态存储分配,变量生存期具有嵌套特性,即,后进先出,的特性(如递归),进入时:,在栈顶为其分配一个数据区,退出时,:撤消过程数据区,练习,下面程序的运行结果是什么?如果把第6行的(i+1)*fact()改成,fact()*(i+1),的话,则程序的运行结果是有什么变化?试分析为什么会有这两种不同的结果。,int fact(),static,int i=5;,if(i=0)return 1;,else,i-;,return(i+1)*fact();,/第6行,main(),printf(factor of 5!=%dn,fact();,10.4堆式动态存储分配,变量生存期具有,随机交叉,特性,即非后进先出的特性(如程序运行时动态申请存储空间),给运行的程序划分一个大的存储区(称为,堆,),每当,需要时可从堆中分得一块,用完之后再退还给堆,
展开阅读全文