目录
- 1 调用过程
- 🙋♂️ 作者:海码007
- 📜 专栏:C++专栏
- 💥 标题:【C++ 函数栈】栈区保存函数参数和函数调用的过程
- ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正
1 调用过程
在C++中,栈区主要用于保存函数调用的信息,包括函数参数、局部变量以及函数调用的返回地址等。当一个函数被调用时,系统会在栈区中分配一块称为栈帧(stack frame)的内存空间,用于存储该函数的相关信息。以下是栈区保存函数参数和函数调用信息的一般过程:
-
函数调用过程:
- 当一个函数被调用时,程序会将函数的参数值压入栈中。
- 接着,程序会将当前函数执行的位置(即下一条指令的地址)压入栈中,以便函数执行完毕后返回到调用位置。
- 最后,程序会跳转到被调用函数的入口点开始执行。
-
函数执行过程:
- 在函数执行期间,函数的参数和局部变量都存储在函数的栈帧中。
- 当需要访问参数或局部变量时,程序会通过相对于栈指针(stack pointer)的偏移量来访问栈帧中的数据。
-
函数返回过程:
- 当函数执行完毕后,程序会从栈顶弹出函数返回地址,并跳转到该地址继续执行。
- 同时,栈指针会回退到函数调用前的位置,释放函数栈帧所占用的内存空间。
- 如果函数有返回值,返回值通常会存储在特定的寄存器中(如EAX寄存器),供调用函数使用。
这样,栈区通过不断压栈和弹栈的操作,实现了对函数参数和函数调用信息的有效保存和管理。这种栈帧的设计使得函数的调用和返回可以高效地进行,并且能够支持递归调用等复杂的函数调用场景。