栈空间
程序的虚拟内存空间可以分为内核空间和用户空间,栈空间就是从用户空间的最高内存地址开始向下增长的空间。栈空间在程序运行期间,主要作用就是维护函数调用的上下文,栈的数据结构(后进先出)也与函数调用流程相符。
函数调用栈
函数调用栈,是将每个函数所用的信息,称之为活动记录或者栈帧,按照调用的顺序依次压入栈中(保存在栈空间中),等最上层的函数执行完了,就弹出相应的栈帧,栈帧主要包括以下几个内容:
- 函数的参数和返回地址
- 旧的EBP
- 保护寄存器的值
- 局部变量
- 其它数据
下面详细地解释函数调用的整体流程,以及为什么要保存这些信息
函数调用流程
我们以一个简单的C++程序来实验下函数调用的整体流程
#include <iostream>
using namespace std;
int Add(int a