跳到主要内容

过程调用与运行时栈

过程是什么?​

  • 定义: 一种代码封装方式, 用一组参数和可选的返回值实现某种功能, 即编程中的函数;
  • 交互: 过程 P 调用过程 Q, Q 执行完把控制权交回 P;

运行时栈怎样支持过程调用?​

  • 机制: 基于后进先出的栈来实现调用与返回;
  • 压栈: P 调用 Q 时把 Q 的返回地址等信息压入栈;
  • 弹栈: Q 返回时把对应信息弹出栈;

什么时候需要分配栈帧?​

  • 优先策略: 过程的数据先尽量放在寄存器中;
  • 需要栈帧的情况:
    • 寄存器不足以存放所有局部数据;
    • 局部变量使用了地址运算符;
    • 局部变量是数组或结构;
  • 位置: 当前正在执行的过程的栈帧总在运行时栈顶;

递归过程怎样使用栈?​

  1. 把当前过程的结果值等信息保存在栈顶;
  2. 调用递归函数, 在栈顶添加新的帧;
    • 递归已到底: 依次释放栈顶空间并逐层返回;
    • 递归未到底: 继续回到第 1 步;