过程调用与运行时栈
过程是什么?
- 定义: 一种代码封装方式, 用一组参数和可选的返回值实现某种功能, 即编程中的函数;
- 交互: 过程 P 调用过程 Q, Q 执行完把控制权交回 P;
运行时栈怎样支持过程调用?
- 机制: 基于后进先出的栈来实现调用与返回;
- 压栈: P 调用 Q 时把 Q 的返回地址等信息压入栈;
- 弹栈: Q 返回时把对应信息弹出栈;
什么时候需要分配栈帧?
- 优先策略: 过程的数据先尽量放在寄存器中;
- 需要栈帧的情况:
- 寄存器不足以存放所有局部数据;
- 局部变量使用了地址运算符;
- 局部变量是数组或结构;
- 位置: 当前正在执行的过程的栈帧总在运行时栈顶;
递归过程怎样使用栈?
- 把当前过程的结果值等信息保存在栈顶;
- 调用递归函数, 在栈顶添加新的帧;
- 递归已到底: 依次释放栈顶空间并逐层返回;
- 递归未到底: 继续回到第 1 步;