面试题答案
一键面试栈帧创建
- 函数调用发生:当一个函数被调用时,系统会在调用者的栈空间之上为被调用函数分配一块新的栈空间,即创建栈帧。
- 参数传递:调用者将函数参数按照顺序压入栈中,为被调用函数准备数据。
- 返回地址保存:调用者将返回地址(即函数调用结束后要返回继续执行的指令位置)压入栈,以便函数执行完毕后能正确返回。
栈帧销毁
- 函数执行完毕:当被调用函数执行到
return
语句或者函数结束时,开始销毁栈帧。 - 清理栈空间:按照与创建时相反的顺序,弹出栈帧中的参数、局部变量等数据,释放栈空间。
- 返回:根据栈中保存的返回地址,将控制权返回给调用者,调用者继续执行后续指令。
栈帧包含信息
- 函数参数:传递给函数的参数值,用于函数执行。
- 局部变量:函数内部声明的变量,其生命周期局限于函数执行期间。
- 返回地址:函数执行完毕后返回调用者继续执行的指令位置。
- 临时数据:函数执行过程中产生的临时计算结果等数据。