当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

西北工业大学:《编译原理》课程教学资源(PPT课件)第7章 运行时的存储组织与分配

资源类别:文库,文档格式:PPT,文档页数:19,文件大小:245KB,团购合买
7.1 存储组织 7.2 运行时的分配策略
点击下载完整版文档(PPT)

第七章 运行时的存储组织与分配 编泽程序必须为源程序中所出现的量(常量,变量及 数组等等)分配运行时的存储空间 分配方橐选择的是否得当将关系到资源的合理使用, 从而会影响到程序的运行效率, 存储分配的策略有静态分配与动态分配两类 静态分配适合于无动态申请内存,无可变体积数组, 无递归调用的程序.如FORTRAN,BASIC等 动态存储分配适用面广是目前最常用的分配方案 动亵分配又有钱式分配与维式分配两种

第七章 运行时的存储组织与分配 编译程序必须为源程序中所出现的量(常量,变量及 数组等等)分配运行时的存储空间. 分配方案选择的是否得当将关系到资源的合理使用, 从而会影响到程序的运行效率. 存储分配的策略有静态分配与动态分配两类. 静态分配适合于无动态申请内存,无可变体积数组, 无递归调用的程序.如FORTRAN,BASIC等. 动态存储分配适用面广是目前最常用的分配方案 动态分配又有栈式分配与堆式分配两种

7.1存储组织 7.1.1运行时内存的艾刘分 运行时,系统为目标程序分配的存储空 目标代码区 间按用途可划分为下面几个部分: 1.目标程序区存放目标程序; 静态数据区 2.静态数据区编译时可确定的占用存 储空间大小的数据: 运行栈区 3.运行栈区 运行时才能分配存储空 间的数据区: 4.堆区 用于用户动态申请存储 动态数据区 空间 堆区

7.1 存储组织 7.1.1 运行时内存的划分 运行时,系统为目标程序分配的存储空 间按用途可划分为下面几个部分: 1.目标程序区 存放目标程序; 2.静态数据区 编译时可确定的占用存 储空间大小的数据; 3.运行栈区 运行时才能分配存储空 间的数据区; 4.堆区 用于用户动态申请存储 空间 目标代码区 静态数据区 运行栈区 ↓ … ↑ 堆区 动 态 数 据 区

存储分配策略 ·因目标代码的长度在编译时就可确定,可放在静态区内; 对于在编译时已知大小的数据对象(如常量,全局变量,静 态变量等等),也可放在静态区内; 。 为提高运行效率,应尽可能多地分配静态数据空间. FORTRAN,BASIC的分配一般可全部放在静态区内. ·像PASCAL,C这类语言的实现,由于子程序允许递归地调 用,因此应用一数据栈来动态地管理内存分配, ·另外PASCAL和C还允许动态地中请的内存,这种数据的空 间可由堆式分配实现

存储分配策略 • 因目标代码的长度在编译时就可确定,可放在静态区内; • 对于在编译时已知大小的数据对象(如常量,全局变量,静 态变量等等), 也可放在静态区内; • 为提高运行效率,应尽可能多地分配静态数据空间. FORTRAN,BASIC的分配一般可全部放在静态区内. • 像PASCAL,C这类语言的实现,由于子程序允许递归地调 用,因此应用一数据栈来动态地管理内存分配. • 另外PASCAL和C还允许动态地申请的内存,这种数据的空 间可由堆式分配实现

7.1.2活动记录 ·一个过程的一次执行所需信 息的管理,是通过称为话动 返回的值 记录的连续存储块来实现的。 ·话动记录的内容见右图。 实参 。天 在PASCAL,C语言中,通常 任选的控制链 采用以过程为单位的动态存 储分配方案: 任选的存取链 当一过程被调用时,就把其话动 保存的机器状态 记录压入运行时存储栈顶,返 回时弹出之。 局部数据 临时变量

7.1.2 活动记录 • 一个过程的一次执行所需信 息的管理,是通过称为活动 记录的连续存储块来实现的。 • 活动记录的内容见右图。 • 在PASCAL,C语言中,通常 采用以过程为单位的动态存 储分配方案: 当一过程被调用时,就把其活动 记录压入运行时存储栈顶,返 回时弹出之。 返回的值 实参 任选的控制链 任选的存取链 保存的机器状态 局部数据 临时变量

活动记录的组成 1.临时意量域存放目标程序临时变量的值; 2. 局部款据域存放本次执行中的局部数据、简变、数组 内情向量等; 3. 机器状态域保存在调用该过程前有关机器状态的信息, 包括各种寄存器的当前值及返回地址等; 4. 径速的存取链为访问其它活动记录中所存放的非局部 数据提供链地址(PASCAL中用到); 5. 在進的控制链用于指向主调过程的活动记录; 6. 实在参数存放主调过程为被调过程提供的实参信息; 7. 返▣值域被调过程用来为主调过程存放返回值的域;

活动记录的组成 1. 临时变量域 存放目标程序临时变量的值; 2. 局部数据域 存放本次执行中的局部数据、简变、数组 内情向量等; 3. 机器状态域 保存在调用该过程前有关机器状态的信息, 包括各种寄存器的当前值及返回地址等; 4. 任选的存取链 为访问其它活动记录中所存放的非局部 数据提供链地址(PASCAL中用到); 5. 任选的控制链 用于指向主调过程的活动记录; 6. 实在参数 存放主调过程为被调过程提供的实参信息; 7. 返回值域 被调过程用来为主调过程存放返回值的域;

活动记录的组成(续) ·每个活动记暴都可分为定长部分和可变部分. 。 交长都分用于存放在编译时就能确定其体积的量, 如简单变量、常界数组等; ·可变部分适用于存放只有在运行时才能确定其体 积的量,如可变数组等 。 虽然可变数组的体积在动态运行时才能确定,但其 地址的访问却在编译时就可确定,即通过活动记录 的首地址+偏移量来访问.因为与它的体积有关的 信息(如内情向量)是在定长部分存放的

活动记录的组成(续) • 每个活动记录都可分为定长部分和可变部分. • 定长部分 用于存放在编译时就能确定其体积的量, 如简单变量、常界数组等; • 可变部分 适用于存放只有在运行时才能确定其体 积的量,如可变数组等. • 虽然可变数组的体积在动态运行时才能确定,但其 地址的访问却在编译时就可确定,即通过活动记录 的首地址+偏移量来访问.因为与它的体积有关的 信息(如内情向量)是在定长部分存放的

7.2运行0时的分配策咯 ·71节所示的数据区的组织,各自使用了不, 的存储分配策略: -静态分配: -栈式分配(亦称栈式动态分配): -堆式分配(亦称堆式动态分配)

7.2 运行时的分配策略 • 7.1节所示的数据区的组织,各自使用了不同 的存储分配策略: – 静态分配; – 栈式分配(亦称栈式动态分配); – 堆式分配(亦称堆式动态分配)

7.2.1静态分配 ·若在编译阶段就能确定源程序中各个数据实体的存储空间 大小,则可以采用较简单的静态存储管理 ·适合静宽管理的语言应具备下述条件: 一数组上下界是常款, 一过程调用不尤许递恒; 一不龙许动态建立数据实体。 ·满足上述条件的语言有FORTRAN、BASIC等。 ·由于过程调用无递归,过程的动记暴可直接安排在程序 代码之后,执行时不必进行运行时的存储管理

7.2.1 静态分配 • 若在编译阶段就能确定源程序中各个数据实体的存储空间 大小,则可以采用较简单的静态存储管理 • 适合静态管理的语言应具备下述条件: – 数组上下界是常数; – 过程调用不允许递归; – 不允许动态建立数据实体。 • 满足上述条件的语言有FORTRAN、BASIC等。 • 由于过程调用无递归,过程的活动记录可直接安排在程序 代码之后,执行时不必进行运行时的存储管理

FORTRAN语言的 静态存储分配 o FORTRAN程序中各程序段均可独立进 行编译; ·在编译时,为程序段中的量分配单元的 临时变量 方法是,为每个量确定一个整数对m, 数组 其中m指明数据区编号,指明该存储单 简单变量 元在数据区相对于首单元的偏移量,并 把此对填入符号表中。 ·各数据区首单元地址暂不确定,待各程 形式单元 序段全部编译完后再由连接程序指定。 FORTRAN局部数据区内容见右图。 隐参数(返回 地址、寄存器 内容等)

FORTRAN语言的 静态存储分配 • FORTRAN程序中各程序段均可独立进 行编译; • 在编译时,为程序段中的量分配单元的 方法是,为每个量确定一个整数对(m,n), 其中m指明数据区编号,n指明该存储单 元在数据区相对于首单元的偏移量,并 把此对填入符号表中。 • 各数据区首单元地址暂不确定,待各程 序段全部编译完后再由连接程序指定。 • FORTRAN局部数据区内容见右图。 临时变量 数组 简单变量 形式单元 隐参数(返回 地址、寄存器 内容等)

各程序投爱数区的分配 各段数据区的分配有两种方案: ()不考虑各段间的调用关系,各自独立占有互不相 交的空间: 2划定一连猿空间,在定义各局部数据区时,根据 相互间的调用(或不调用)关系,安排最合理的 分配方案

各程序段数据区的分配 各段数据区的分配有两种方案: (1)不考虑各段间的调用关系,各自独立占有互不相 交的空间; (2)划定一连续空间,在定义各局部数据区时,根据 相互间的调用(或不调用)关系,安排最合理的 分配方案

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共19页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有