编译原理学习笔记——CH7-Runtime Environments运行时环境

本章重点:

  1. 为什么函数调用可以采用栈式存储?
  2. 函数调用和返回过程中需要记录哪些信息?如何记录?

主要知识点:

 环境、状态、activation (激活) of procedures 、elaboration (确立) of declarations , evaluation (求值) of expressions
 函数的activation tree 和函数的生命期之间的关系
 活动记录
 子程序非嵌套情形下的活动记录布局(以C 语言为例)。
 嵌套声明下如何查找外层的作用域中的变量的值? (忽略 )

一.预备知识

执行中的程序叫做进程,进程包括多个procedures(函数调用),执行中的程序会激活相应的procedures

1.1环境和状态

环境 :maps a name to a storage location

状态 : maps a storage location to the value held there

总结:

  • 环境主要描述程序符号(如变量和函数)与它们的值、类型、作用域等的映射关系。
  • 状态反映了程序在某一时刻的实际执行情况,包括所有内存值、控制流状态等。
  • 环境通常影响状态的变化,而状态的变化则反映了程序的执行过程。

二.CH7

2.1Storage Organization

2.2Stack Allocation of Space

主要讲:

  1. 函数的activation tree和函数的生命期之间的关系
  2. 活动记录

2.2.1Activation Trees(活动树)

只要有一个孩子存在,父亲就存在。当孩子都消失了,父亲也就消失了。可用来估计procedure的生命周期。

2.2.2 Activation records活动记录

注意龙书的图栈底在上,

2.2.3 c语言活动记录

另一个例子:

cpp 复制代码
#include <stdio.h>
int x, y;

int main()
{
  x=5;
  y=f(x);
}

int f(int n)
{
  if (n<=1)
      return 1;
  else 
    if ( n==2)
        return 2;
      else
      {
           int t1, t2, t3, t4, t;
           t1=f(n-1);
           t2=f(n-2);
           t3=f(n-3);
           t4=t1+t2
           t=t3+t4;
           return t
       }
}
相关推荐
麦麦大数据19 分钟前
F039 python五种算法美食推荐可视化大数据系统vue+flask前后端分离架构
python·算法·vue·推荐算法·美食·五种算法
星空露珠32 分钟前
数独解题算法lua脚本
开发语言·数据结构·算法·游戏·lua
小猪咪piggy35 分钟前
【算法】day14 链表
数据结构·算法·链表
EnCi Zheng36 分钟前
LeetCode_1_两数之和完全解析-从暴力枚举到哈希表优化的算法进阶之路
算法
寂静山林40 分钟前
UVa 1620 Lazy Susan
算法
天选之女wow42 分钟前
【代码随想录算法训练营——Day51】图论——99.计数孤岛、100.最大岛屿的面积
算法·图论
承渊政道1 小时前
算法复杂度
c语言·数据结构·c++·算法·visual studio
Giser探索家1 小时前
无人机数字资产采集技术架构与实践:从多维度感知到云端化建模的实现路径
大数据·人工智能·算法·计算机视觉·分类·无人机
~~李木子~~1 小时前
动态规划算法实践:从斐波那契到数字推理
算法·动态规划·代理模式
磊-2 小时前
数组双指针总结
数据结构·算法