编译原理学习笔记——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
       }
}
相关推荐
软件算法开发31 分钟前
基于黑翅鸢优化的LSTM深度学习网络模型(BKA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·算法·lstm·时间序列预测·黑翅鸢优化·bka-lstm
小南家的青蛙31 分钟前
LeetCode第79题 - 单词搜索
算法·leetcode·职场和发展
PAK向日葵35 分钟前
【算法导论】PDD 0928 笔试题解
算法·面试
我爱计算机视觉3 小时前
ICCV 2025 (Highlight) Being-VL:师夷长技,用NLP的BPE算法统一视觉语言模型
人工智能·算法·语言模型·自然语言处理
virtual_k1smet8 小时前
#等价于e * d ≡ 1 mod φ(n) #模逆元详解
人工智能·算法·机器学习
可触的未来,发芽的智生9 小时前
新奇特:神经网络的集团作战思维,权重共享层的智慧
人工智能·python·神经网络·算法·架构
_屈臣_9 小时前
卡特兰数【模板】(四个公式模板)
c++·算法
坚持编程的菜鸟9 小时前
LeetCode每日一题——交替合并字符串
c语言·算法·leetcode
悦悦子a啊10 小时前
[Java]PTA: jmu-Java-02基本语法-08-ArrayList入门
java·开发语言·算法
xlq2232210 小时前
12.排序(上)
数据结构·算法·排序算法