make gcc通过寄存器传递参数

时间:2012-07-20 08:19:34

标签: c linux gcc

在我的32位x86 Ubuntu11.10上,gcc4.6.3通过堆栈传递参数。是否存在强制gcc通过寄存器传递参数的gcc优化?那gcc怎么做到的?我想要一些细节。

2 个答案:

答案 0 :(得分:6)

相关属性为__attribute__((fastcall))。使用此属性声明的函数将在ECX中使用其第一个符合条件的参数进行调用,在EDX中调用第二个参数。

(我假设是x86。你刚才说了32位,但它涵盖了很多架构,比如ARM)。

答案 1 :(得分:3)

GCC在你的情况下在堆栈上传递参数,因为Linux-x86 ABI指定了这一点。使用fastcall函数属性,您可以更改它,这当然会破坏ABI并导致各种问题。

解决方案可以是切换到x86-64,其中ABI指定(某些)参数由寄存器传递。或者,如果你喜欢前沿的东西,新的x32 ABI类似于x86-64 ABI,但有32位指针。