函数调用过程

本文详细介绍了函数调用的过程,包括栈帧结构的组成,如何在调用者和被调用者之间传递数据,以及转移控制的实现方式。通过示例展示了函数调用时参数如何存储,返回地址如何保存,并解释了为何需要使用栈来管理这些信息。
摘要由CSDN通过智能技术生成

函数调用过程

一个过程(Procedures)调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。

栈帧结构(Stack Frame Structure)

机器用来传递过程参数、存储返回值信息、保存寄存器用于以后恢复,以及本地存储。而为单个过程分配的那部分栈成为栈帧(stack frame)。如下图。

Alt text

假设过程P(调用者)调用过程Q(被调用者),则Q的参数放在P的栈帧中。当P调用Q时,P中的返回地址被压入栈中,形成P的栈帧的末尾。Q的栈帧从保存的帧指针的值开始,后面是保存的其他寄存器的值。

过程Q也用栈保存其他不能存放在寄存器中的局部变量。这样做的原因如下:
- 没有足够的寄存器存放所有的局部变量。
- 有些变量是数组或结构,所以必须使用数组或结构引用来访问。
- 要对一个局部变量使用地址操作符&,我们必须为他生成一个地址。

转移控制(Transferring Control)
指令 描述
call
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值