编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  1. 运行时刻环境

存储组织

Previous回填Next栈式分配

Last updated 4 months ago

运行时刻环境

为数据分配安排存储位置;确定访问变量时使用的机制;过程之间的连接、参数传递。

我们关注的主题是存储管理(栈分配、堆管理、垃圾回收)和对变量、数据的访问。

目标程序的代码放置在代码区;静态区、堆区和栈区分别放置不同类型生命期的数据值。

为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这样的块称为活动记录(Action Record)。

静态分配

  • 编译器在编译时刻就可以做出存储分配决定,不需要考虑程序运行时刻的情形

  • 全局常量、全局变量

名字在程序被编译时绑定到存储单元,不需要运行时的支持。绑定的生存期是程序的整个运行期间,例如C程序的外部变量、静态局部变量(static)以及程序中出现的常量都可以静态分配。

动态分配

  • 栈式存储:和过程的调用/返回同步进行分配和回收,值的生命期与过程生命期相同

  • 堆存储:数据对象可比创建它的过程调用更加长寿(手工进行回收、垃圾回收机制)