基础

1. 相关概念:

1.1. 函数的概念:

  1. 函数注定是多层嵌套的
    1. 研究函数一定要同时考虑上下层函数
  2. 对于函数执行环境,最重要的有三点:
    1. 返回值数据, 作为输出
    2. 函数作用域
      1. 函数中的局部变量, 作为处理实际数据的开销
      2. 传入的实参数据, 作为输入
    3. 转跳地址和返回地址
      1. 因为要控制程序流, 有去有回

2. 梗概:

2.1. 函数调用和返回的大致思想

对程序现在运行到某一个函数B中

  1. 调用函数C有三步:
    1. 保存当前函数A的数据(如函数作用域,返回地址)
      1. 入栈实参和返回地址, 局部变量另外保存
    2. 给下一层函数C的数据分配空间, 并传入其所需实参数据
    3. 根据函数B的跳转地址, 程序运行流跳转
  2. 返回函数A有三步:
    1. 保存返回值
    2. 清理释放当前函数B的所有不必要的数据(如实参,局部变量), 读取上一层函数A的所需数据(如实参,局部变量,返回地址)
      1. 出栈实参和返回地址, 局部变量另外读取
    3. 根据当前函数B的返回值, 程序运行流跳转

2.2. 函数调用和返回所需数据结构:

  1. 用到
    1. 根据多层函数之间的数据后进先出的特点
  2. 称为递归工作栈
    1. 专门用来存放函数调用所需数据开销
  3. 递归工作栈中只存储实参数据返回地址
    1. 因为各种原因, 函数局部变量和返回值不用递归工作栈保存