当使用来自C程序的两个整数或指针参数调用非inline
函数时,它们将在寄存器rdi
和rsi
中传递。编译是否可以以这样的方式完成: inline
函数的整数/指针参数也会在寄存器中传递(并且不在堆栈中)?< / p>
答案 0 :(得分:6)
当函数内联时,它被视为将其代码写入调用它的函数中。发生这种情况时,根本不会传递参数。
当一个函数没有内联时,它与普通函数完全没有区别。 inline
只是编译器尝试内联函数的一个提示;它根本不会影响联系。
答案 1 :(得分:3)
反问:你为什么关心?我想你不应该。那是你的编译工作。如果你不相信你的编译器在那里做正确的事情,你可能根本就不应该使用它。
而且我很确定你的假设是参数一直保证落在寄存器中也是假的。
答案 2 :(得分:0)
在C中,前两个int没有被传递到%rdi和%rsi ......这是一个ABI / Calling Convention问题......不是语言问题。
如果函数内联并且周围代码的其余部分允许,则int可能会在通用寄存器中...
但这绝对不是你的顾虑......如果你关心,你可以让编译器生成asm来阅读和学习......