在C中使用堆栈传递给函数的参数

时间:2016-04-04 04:57:52

标签: c stack abi

函数的参数是否总是使用ABI的堆栈传递?

感谢。

2 个答案:

答案 0 :(得分:1)

ABI或应用程序二进制接口涵盖了二进制代码之间的合同中的各种细节。

  • (广义定义) - 它定义了调用函数的机制,如何在调用者和被调用者之间传递参数,如何向调用者提供返回值,如何实现库,以及如何将程序加载到存储器中。

  • (具体)调用约定,它控制函数参数的传递方式并返回检索的值;例如,是否所有参数都在堆栈上传递,或者某些参数是在寄存器中传递,哪些寄存器用于哪些函数参数,以及是否先将第一个函数参数传递到堆栈中堆栈。

  • 一个实例 - 参考ARM ABI Procedure Call Standard for ARM Architecture提到的调用约定 - 您可以参考Stack上的部分(第16页的结尾) - 堆栈是一个连续的内存区域,可用于存储局部变量和传递 当参数寄存器不足

  • 时子例程的其他参数

答案 1 :(得分:-1)

是的,函数的参数总是使用堆栈传递。这就是为什么如果要传递大的东西,建议传递指针以避免堆栈溢出。