1. 相关概念:
1.1. 函数的概念:
- 函数注定是多层嵌套的
- 研究函数一定要同时考虑上下层函数
- 对于函数执行环境,最重要的有三点:
- 返回值数据, 作为输出
- 函数作用域
- 函数中的局部变量, 作为处理实际数据的开销
- 传入的实参数据, 作为输入
- 转跳地址和返回地址
- 因为要控制程序流, 有去有回
2. 梗概:
2.1. 函数调用和返回的大致思想
对程序现在运行到某一个函数B中
- 调用函数C有三步:
- 保存当前函数A的数据(如函数作用域,返回地址)
- 入栈实参和返回地址, 局部变量另外保存
- 给下一层函数C的数据分配空间, 并传入其所需实参数据
- 根据函数B的跳转地址, 程序运行流跳转
- 保存当前函数A的数据(如函数作用域,返回地址)
- 返回函数A有三步:
- 保存返回值
- 清理释放当前函数B的所有不必要的数据(如实参,局部变量), 读取上一层函数A的所需数据(如实参,局部变量,返回地址)
- 出栈实参和返回地址, 局部变量另外读取
- 根据当前函数B的返回值, 程序运行流跳转
2.2. 函数调用和返回所需数据结构:
- 用到栈
- 根据多层函数之间的数据后进先出的特点
- 称为递归工作栈
- 专门用来存放函数调用所需数据开销
- 递归工作栈中只存储实参数据和返回地址
- 因为各种原因, 函数局部变量和返回值不用递归工作栈保存