码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-05-06 00:12:10      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:函数   调用函数   参数   保存   创建   语句   内存   程序   运行   

函数在内存中到底是怎么经过一系列过程调用的呢?
指针寄存器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.函数调用完成时,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中下一条指令,程序由该点继续运行。

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

标签:函数   调用函数   参数   保存   创建   语句   内存   程序   运行   

原文地址:https://www.cnblogs.com/lsiyu/p/8982990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!