参数传递给Linux C内联函数

时间:2013-04-16 15:25:48

标签: c inline-functions

当使用来自C程序的两个整数或指针参数调用非inline函数时,它们将在寄存器rdirsi中传递。编译是否可以以这样的方式完成: inline函数的整数/指针参数也会在寄存器中传递(并且在堆栈中)?< / p>

3 个答案:

答案 0 :(得分:6)

当函数内联时,它被视为将其代码写入调用它的函数中。发生这种情况时,根本不会传递参数。

当一个函数没有内联时,它与普通函数完全没有区别。 inline只是编译器尝试内联函数的一个提示;它根本不会影响联系。

答案 1 :(得分:3)

反问:你为什么关心?我想你不应该。那是你的编译工作。如果你不相信你的编译器在那里做正确的事情,你可能根本就不应该使用它。

而且我很确定你的假设是参数一直保证落在寄存器中也是假的。

答案 2 :(得分:0)

在C中,前两个int没有被传递到%rdi和%rsi ......这是一个ABI / Calling Convention问题......不是语言问题。

如果函数内联并且周围代码的其余部分允许,则int可能会在通用寄存器中...

但这绝对不是你的顾虑......如果你关心,你可以让编译器生成asm来阅读和学习......