(1)寄存器
这里对于寄存器不进行深入探究,只需知道寄存器分为以下8种。
其中EBP和ESP两个寄存器存放的是地址,这两个地址是用来维护函数栈帧的
EBP:栈底指针
ESP:栈顶指针
(2)函数调用都是在栈上创建空间的。
(3)栈都是从高地址往低地址分配内存的
(4)函数栈帧的创建和销毁是基于栈所实现的
所谓栈,是一种数据结构,具有先进后出的特点。在函数栈帧创建过程中,内存从高地址开始使用,越后面创建的函数栈帧或压栈数据,所存储的空间地址越低。
(5)main函数是会被其他函数调用的,在不同编译器中调用main的函数也不同
在VS2019中:
先点击逐语句————>再按下 crtl+ alt+c,完成调用堆栈窗口调出
此时可以看到main函数被调用了
3.函数栈帧创建与销毁的过程
以如下的加法函数代码块来演示C语言在vs2013上的过程:
#include <stdio.h> int add(int x, int y) { int t; t = x + y; return t; } int main() { int a = 1; int b = 2; int c = 0; c = add(a, b); printf("%d\n",c); return 0; }