标签: c arguments calling-convention
我唯一知道C传递值的机制是通过寄存器或堆栈完成的。
注册还是堆叠?具体怎么样?
答案 0 :(得分:5)
两者。这些惯例因平台而异。
在x86上,值通常由堆栈传递。在x64上,首选寄存器。
在所有情况下,如果您有太多参数,则必须通过堆栈传递一些参数。
请参阅x86 calling conventions
答案 1 :(得分:3)
通常(某些编译器将按照指出的方式进行不同的操作)对于它们在堆栈上传递的正常函数调用。这通常是一系列推送指令,只是将数据放入堆栈。
有一些特殊情况,例如系统调用,其中参数通过汇编指令和寄存器传递。在硬件情况下,它们通过寄存器或甚至某些中断信号传递,从而写入寄存器。
在具有大量寄存器的架构上,它们通常通过诸如RISC和64位架构之类的寄存器传递。