C语言中参数的传递

时间:2023-03-10 01:18:35
C语言中参数的传递

普通情况:

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

C语言中参数的传递

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

C语言中参数的传递

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

C语言中参数的传递

可以看出先出栈之后R0,R1,R2,R3(这四个不经过出栈入栈,直接通过寄存器传递),r5,r6,r7,r8,r12装载参数。

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

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

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

C语言中参数的传递

传递浮点数:浮点数存的时候和int类型不一样,传的时候没区别。比如在内存里C语言中参数的传递

这个是把0.5放到R4里

相关文章