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

C语言中参数的传递

时间:2016-03-08 20:58:51      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

普通情况:

 

调用函数参数的传递,是采取入栈的方式,先上图一张:

技术分享 

 

Fun是被调用的函数,而为了演示其参数传递的过程,特意多设了几个参数,其传递参数的汇编代码如下:

技术分享 

 

可以看出,汇编代码中将这9个参数的前5个入栈,后几个直接通过寄存器来传递,而进入函数中出栈代码如下:

技术分享 

可以看出先出栈之后R0R1R2R3(这四个不经过出栈入栈,直接通过寄存器传递),r5r6r7r8r12装载参数。

 

在实验得出个很重要的结论:并不是在参数传递过程中所有的参数都需要入栈,一部分参数通过R0-R3传递,甚至参数小于4个的时候就不涉及出栈入栈操作了,个人感觉这是编译器的一种优化。

 

 

 

递归函数:就是一层层的普通操作。第二次入栈操作之前,第一次入栈的数据已经弹出。

 

 

传递结构体:元素小于四个,也是通过R0R1R2R3操作,元素多了,也得入栈。

技术分享 

 

 

传递浮点数:浮点数存的时候和int类型不一样,传的时候没区别。比如在内存里技术分享

这个是把0.5放到R4

 

 

 

 

 





C语言中参数的传递

标签:

原文地址:http://www.cnblogs.com/dchipnau/p/5255284.html

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