函数参数如何在C中传递?

时间:2011-09-17 01:09:12

标签: c arguments calling-convention

我唯一知道C传递值的机制是通过寄存器或堆栈完成的。

注册还是堆叠?具体怎么样?

2 个答案:

答案 0 :(得分:5)

两者。这些惯例因平台而异。

在x86上,值通常由堆栈传递。在x64上,首选寄存器。

在所有情况下,如果您有太多参数,则必须通过堆栈传递一些参数。

请参阅x86 calling conventions

答案 1 :(得分:3)

通常(某些编译器将按照指出的方式进行不同的操作)对于它们在堆栈上传递的正常函数调用。这通常是一系列推送指令,只是将数据放入堆栈。

有一些特殊情况,例如系统调用,其中参数通过汇编指令和寄存器传递。在硬件情况下,它们通过寄存器或甚至某些中断信号传递,从而写入寄存器。

在具有大量寄存器的架构上,它们通常通过诸如RISC和64位架构之类的寄存器传递。