要理解什仫是栈帧首先就要理解什仫是栈?
那仫什仫是栈呢?在数据结构中有一种结构叫栈,它的定义为:仅在表尾进行插入和删除的操作
我们允许插入和删除的一端称为栈顶(esp),另一端则为栈底(ebp),所以栈又被称为后进先出的线性表(LIFO).而且我们知道在内存中空间的分配是从高地址向低地址增长的;
好了说了这仫多的栈那仫什仫是栈帧呢?其实说白了栈帧实际上就是用来记录函数调用过程的信息,是编译器用来实现函数调用过程的的一种数据结构.下图是我对栈帧分布的一点理解,以下都是在VC++6.0版本下测试的:
下面就让我们来看一道关于main函数栈帧的代码:
#include<iostream>
using namespace std;
int print()
{
cout<<"i love you"<<endl;
exit(1);
}
int Add(int a,int b)
{
int z=0;
*((int *)&z+2)=(int)print();
z=a+b;
return z;
}
int main()
{
int a=10;
int b=20;