在 c++++ 函数调用约定中,栈帧用于:1. 存储函数参数,使被调用的函数可以访问;2. 创建并存储局部变量;3. 保存和还原寄存器;4. 存储返回地址,以便函数返回时恢复调用者函数。
栈帧如何在 C++ 函数调用约定中发挥作用
在 C++ 函数调用约定中,栈帧对于传递参数、存储局部变量和实现函数范围至关重要。每个函数调用都会创建一个与之关联的栈帧,其中包含以下信息:
- 函数参数:函数参数存储在栈帧的已知偏移处,以便被调用的函数可以轻松访问它们。
- 局部变量:函数的局部变量也在栈帧中创建并存储,在函数执行期间可以使用。
- 返回地址:当函数返回时,调用者的地址存储在栈帧中。
- 保存的寄存器:函数调用可能会更改某些寄存器的值。调用约定定义了哪些寄存器需要保存并还原到栈帧中。
实战案例
立即学习“C++免费学习笔记(深入)”;
考虑以下 C++ 函数:
1 2 3 4 |
|
当 sum 函数被调用时,将创建一个栈帧来存储以下信息:
- 参数 a 和 b 存储在已知的偏移处。
- 局部变量 c 在栈帧中创建。
- 调用者函数的返回地址存储在栈帧中。
- 与此函数调用相关的寄存器(例如基址寄存器)被保存到栈帧中。
当 sum 函数返回时,栈帧中的返回地址被用来将控制权返回给调用者函数。占用的栈空间并被释放。