第八章目标程序运行时的组织8.1概述8.2数据表示8.3目标程序运行时的栈式存储组织8.4参数传递8.5堆式存储概述概述-代码生成解决语义gap高级语言支持的概念TypevalueexpressionVariableprocedureFunctionparameters目标机支持的概念bitsbyteswordsRegistersStackaddressRoutine(subroutine)概述代码生成前如何安排目标机资源运行时组织的几个问题数据表示-如何在目标机中表示每个源语言类型的值表达式求值-如何组织表达式的计算存储分配-如何组织不同作用域变量的存储过程实现-如何以例程实现过程,函数,参数传递概述任务:编译程序对目标程序运行时的组织(设计运行环境和分配存储)如通常存储区布局可为:目标代码区静态数据区Stackheap运行环境和存储分配设计分析逻辑阶段:在目标代码生成前,作准备实质:关联(Binding)将源程序的文本程序运行动作的实现源文件中的名字N运行时的存储S在语义学中,使用术语environment函数表示env:N→S(N到S的映射)静态文本中运行时动作及为实现其动作的准备(与运行时数据对象的表示有关)过程定义过程名执行过程体过程体控制数据对象的分配,为执行过程体使用源文本中同样的名字目标程序中不同的数据空间因为一个过程可以是递归的,这时同一个名字在不同的时间可能代表不同的存储单元决定运行管理复杂程度的因素——源语言本身1.允许的数据类型的多少2.语言中允许的数据项是静态确定动态确定3.程序结构决定名字的作用域的规则和结构A.段结构(Fortran)B.过程定义不嵌套,只允许过程递归调用C.分程序结构分程序嵌套过程定义嵌套4存储类别的多少GlobalStaticLocaldynamic术语•静态:如果一个名字的性质通过说明语句或隐或显规则而定义,则称这种性质是“静态”确定的。•动态:如果名字的性质只有在程序运行时才能知道,则称这种性质为“动态”确定的。•例procedureA(m,n:integer);•beginrealz;•arrayB[m:n];•begin•·•·•·•end;•end;数据表示各种数据对象的存储分配数据对象的属性name名字,名称type类型location内存地址value值component成分数据表示简单变量:char:1byteintegers:2or4bytesfloats:4to16bytesbooleans:1bit(butusually1byte)指针:unsignedintegers一维数组:一块连续的存储区多维数组:一块连续的存储区,按行存放结构(记录):把所有域(field)存放在一块连续的存储区对象:类的实例变量象结构的域一样存放在一块连续的存储区,但方法(成员函数)不存在该对象里指令...