函数调用栈
什么是函数调用栈
函数是每一门编程语言中,不可缺少的部分。函数本质是一片成块的内存指令。而函数调用,除了基本的程序指令跳转外,还需要保存函数相关的上下文,也就是函数的参数,本地变量,返回参数,返回地址等。保存函数上下文的就是我们常说的函数栈
。函数相互调用的栈结构,就是函数调用栈。
函数调用栈用在何处
- 函数调用栈是函数调用必不可少的组成部分。
- 我们常说的协程,底层的实现原理,都是基于函数调用栈的。协程切换,就是不同的栈帧切换,同时保存相关的上下文,当然这里也有寄存器值的保存。
C语言实现
#include <stdio.h>
int sum(int a, int b, int c) {
int sum_loc1 = 7;
int sum_loc2 = 8;
int sum_loc3 = 9;
return sum_loc1 + sum_loc2 + sum_loc3 + a + b + c;
}
int main(int argc, const char *argv[]) {
int loc1 = 1