c语言函数参数的压栈,函数的调用过程(栈帧)

1、什么是栈帧?

栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。C语言中,每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是一个函数执行的环境:函数调用框架、函数参数、函数的局部变量、函数执行完后返回到哪里等等。栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。

2、Add()函数的调用过程

我们以Add()函数为例深入的研究一下函数的调用过程。先看一段简单的代码:

1 #include  2 int Add(int x, int y) 3 { 4 int z = 0; 5 z = x + y; 6 return z; 7 } 8 int main() 9 {10 int a = 10;11 int b = 20;12 int ret = Add(a, b) ;13 printf("ret = %d\n", ret) ;14 return 0;15 }

当讲程序调试的时候, 查看【调用堆栈】(按F10进入调试-窗口-调用堆栈,或按快捷键ctrl+alt+C) ,用VS2015调试 如下图:

如果用版本更老的,或其他如VC6.0等编辑器则可以看到更多信息,VS2008调试如图:

我们发现其实main函数在 __tmai nCRTStartu

你可能感兴趣的:(c语言函数参数的压栈)