C语言--函数的调用调用过程,栈帧的创建和销毁。

it2022-05-05  129

函数在内存中到底是怎么经过一系列过程调用的呢? 指针寄存器esp,ebp 1.  首先先搞清楚函数调用中两个非常重要的指针寄存器esp,ebp。对这两个寄存器的一些理解: esp为栈指针,用于指向栈的栈顶 ebp为帧指针,指向栈的栈底。 函数栈帧 2.  函数调用过程中需要开辟空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间 我们称之为函数栈帧。 栈空间由高地址向低地址使用。 函数调用过程

当函数被调用的时候,执行如下操作:

1.将帧指针压入栈中:   push ebp 2.用ebp保存当前栈指针:mov ebp ,esp 3.栈指针自减,得到的内存被用来存储被调用函数的本地状态:sub esp ,4Ch 4.在函数调用时,第一个进栈的是被调用函数后的下一条指令的地址(函数调用语句的下一条可执行语句即call指令下一条指令的地址)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,先压形参b在压形参a ,然后是函数中的局部变量。注意静态变量是不入栈的。 5.函数调用完成时,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中下一条指令,程序由该点继续运行。

转载于:https://www.cnblogs.com/lsiyu/p/8982990.html

相关资源:各显卡算力对照表!

最新回复(0)