繁体   English   中英

make gcc通过寄存器传递参数

[英]make gcc pass the arguments by register

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM