1. 什么是栈帧
C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。
栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。
2. 栈帧的相关名词
每一次函数调用,都会为本次函数开辟空间,如何维护这个片栈空间。那么需要指针来维护这片空间。
EBP (extended base pointer)存放指向栈底的指针。
EBP (extended stack pointer)存放指向栈顶的指针。
栈的空间是由高地址向低地址进行使用的。
3. 栈帧
使用的代码
#include<stdio.h>
int Add(int x, int y)
{
int ret = 0;
ret = x + y;
return ret;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = Add(a, b);
printf("%d",ret);
return 0;
}
首先在main函数调用之前,我们发现main函数也是受其他函数调用的。
main函数是被_tmainCRTStartup调用,而_tmainCRTStartup又是受其他函数调用。