[Android Pro]深入理解函数的调用过程——栈帧

【[Android Pro]深入理解函数的调用过程——栈帧】笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述[Android Pro]深入理解函数的调用过程——栈帧相关的知识,希望能为你提供帮助。
cp : /uploads/allimg/220502/092T43543-7.jpg
每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧。


首先,我们了解一下不同种类的寄存器:
(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; }

 
 
 
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片
[Android Pro]深入理解函数的调用过程——栈帧

文章图片


函数调用完成后,释放栈帧。
 
以上就是函数的整个调用过程

 

    推荐阅读