深入理解函数的调用过程——栈帧
2017-12-25 22:32
423 查看
每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧。
首先,我们了解一下不同种类的寄存器:
(1)eax,ebx,ecx,edx :通用寄存器
(2)ebp:存放指向函数栈帧栈底的地址
(3)esp:存放指向函数栈帧栈顶的地址
(4)eip:程序计数器——保存程序当前正在执行指令的下一个指令的地址
接着我们以下面这段代码为例,深入到函数的调用过程中去:
![](https://img-blog.csdn.net/20171225231230537?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231225331?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231219997?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231215757?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231211028?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231206604?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171225231159064?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWF9QZXJzZXZlcmFuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
函数调用完成后,释放栈帧。
以上就是函数的整个调用过程
首先,我们了解一下不同种类的寄存器:
(1)eax,ebx,ecx,edx :通用寄存器
(2)ebp:存放指向函数栈帧栈底的地址
(3)esp:存放指向函数栈帧栈顶的地址
(4)eip:程序计数器——保存程序当前正在执行指令的下一个指令的地址
接着我们以下面这段代码为例,深入到函数的调用过程中去:
#include <stdio.h> #include <windows.h> int Add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 10; int b = 20; int ret = Add(a, b); printf("a+b=%d\n", ret); system("pause"); return 0; }
函数调用完成后,释放栈帧。
以上就是函数的整个调用过程
相关文章推荐
- 深入理解C语言的函数调用过程
- 深入理解计算机系统(3.7)------过程(函数的调用原理)
- 深入理解计算机系统(3.7)------过程(函数的调用原理)
- 深入理解C语言的函数调用过程
- 深入理解C语言的函数调用过程
- 深入理解C语言的函数调用过程 【转】
- 深入理解C语言----函数调用过程浅析
- 深入理解C语言的函数调用过程
- 深入理解C语言的函数调用过程
- 深入理解C语言的函数调用过程
- 深入理解C语言的函数调用过程
- 【栈帧】深入理解函数的调用(栈帧)
- 浅谈函数的调用过程,栈帧的创建和销毁,附图讲解
- 函数调用过程,栈帧的创建和销毁
- MIPS 架构上函数调用过程中的堆栈和栈帧
- 【应聘笔记系列】堆栈、栈帧与函数调用过程分析
- 深入理解JavaScript系列(4) 立即调用的函数表达式
- 堆栈、栈帧与函数调用过程分析
- 深入理解函数内部原理(4)——通过new操作符调用构造函数
- 堆栈、栈帧、函数调用过程