函数调用过程
来源:互联网 发布:linux 图片服务器搭建 编辑:程序博客网 时间:2024/06/06 13:00
函数调用过程
一个过程(Procedures)调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。
栈帧结构(Stack Frame Structure)
机器用栈来传递过程参数、存储返回值信息、保存寄存器用于以后恢复,以及本地存储。而为单个过程分配的那部分栈成为栈帧(stack frame)。如下图。
假设过程P(调用者)调用过程Q(被调用者),则Q的参数放在P的栈帧中。当P调用Q时,P中的返回地址被压入栈中,形成P的栈帧的末尾。Q的栈帧从保存的帧指针的值开始,后面是保存的其他寄存器的值。
过程Q也用栈保存其他不能存放在寄存器中的局部变量。这样做的原因如下:
- 没有足够的寄存器存放所有的局部变量。
- 有些变量是数组或结构,所以必须使用数组或结构引用来访问。
- 要对一个局部变量使用地址操作符&,我们必须为他生成一个地址。
转移控制(Transferring Control)
call
call
leave
prepare stack for return ret
从过程调用中返回call
指令用于将返回地址入栈,并跳转到被调用过程的起始处。
示例
以下面代码片为例所示,caller()
函数中调用sqap_add(xp, yp)
。
int swap_add(int *xp,int *yp){ int x = *yp; int y = *xp; *xp = y; *yp = x; return x+y;}int cller(){ int arg1 = 534; int arg2 = 1023; int sum = swap_add(&arg1, &arg2); int diff = arg1 - arg2; return sum * diff;}
调用过程如下图所示。
0 0
- 进程 过程调用 函数调用
- 函数调用过程
- 函数调用的过程
- 函数调用过程详解
- 函数调用过程详解
- 函数调用的过程
- hibernate调用过程、函数
- 函数调用过程探究
- 函数调用过程探究
- C函数调用过程
- 浅析函数调用过程
- 汇编语言函数调用过程
- 函数调用过程探究
- C函数调用过程
- ASM 函数调用过程
- 函数调用过程探究
- 函数调用过程
- 函数调用过程探究
- Apache 和 Tomcat 的区别与联系
- Android的定时任务Alarm与Timer类的使用
- iOS TextField
- 你好,我的2016
- 关于U盘启动安装CentOS7的注意事项
- 函数调用过程
- 设置vmware客户机进入bios前停顿时间及从U盘启动
- 基于内容的图像检索中常用的标准图像库 Benchmark databases for CBIR
- JSP 验证相关
- 【励志篇】我不知道我的坚持对不对,但是我想试一试
- 再回首-栈-知其然知其所以然
- 在Windows下搭建Gitlab服务器(三)-Gitlab发送邮件配置
- Ipython启动异常(出现warning)警告
- 解决linux下/etc/rc.local开机器不执行的原因