什么是栈帧(stack frame)
定义
🧱 一句话定义:函数的栈帧(stack frame)是函数在运行时在栈(stack)上分配的一块内存,用来保存:参数,返回值,局部变量,返回地址,可能还有调用者的一些上下文信息(如寄存器、defer 信息等)
🧠 为什么需要栈帧?
当你调用一个函数时,程序需要一个临时的空间来处理这个函数的所有工作:
- 把参数传进去
- 处理内部变量
- 保存结果
- 返回之后还能回到调用处继续执行
这些工作都靠“栈帧”来完成。
🧩 举个简单例子
1 | func add(a, b int) int { |
当你调用 add(2, 3) 时,栈帧大概会这样安排:
1 | main 函数栈帧 |
每次调用 add,都会在栈顶开出这样一块独立的空间,函数运行完就销毁它(出栈)。
🎮 类比一下好理解:
想象你去参加游戏闯关(函数调用):
你每到一关(函数),门口会给你发一个背包(栈帧)。
背包里有你这关需要的东西(参数、变量、奖励等)。
通关时你交出背包(return),里面的奖励(返回值)就是你带出这关的东西。
如果你掉了东西(panic),工作人员会根据背包里的备份(defer)帮你收拾残局。