知识卡片
栈帧保存现场
内容
函数调用会建立栈帧,保存参数、返回值、局部变量和返回地址等执行现场。理解栈帧后,panic 栈、汇编输出和性能开销都不再是黑盒。
参考来源
- 位置:《Go语言底层原理剖析》第9章《函数与栈》9.3节《函数栈》
- 结论依据:原文定义"每个函数在执行过程中都使用一块栈内存来保存返回地址、局部变量、函数参数等,我们将这一块区域称为函数的栈帧(stack frame)",并说明被调用函数不能覆盖调用函数的栈帧,因此调用链越深消耗的栈空间越大,因此可以推出"函数调用建立栈帧、保存执行现场"的结论。
- 原始内容:每个函数在执行过程中都使用一块栈内存来保存返回地址、局部变量、函数参数等,我们将这一块区域称为函数的栈帧(stack frame)。当发生函数调用时,因为调用函数没有执行完毕,其栈内存中保存的数据还有用,所以被调用函数不能覆盖调用函数的栈帧,只能把被调用函数的栈帧压栈,等被调用函数执行完毕后再让栈帧出栈。