2

当从 C 程序调用带有两个整数或指针参数的非inline函数时,它们被传递到寄存器rdirsi. inline是否可以通过将函数的整数/指针参数也传递到寄存器(而不是堆栈)的方式来完成编译?

4

3 回答 3

6

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

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

于 2013-04-16T15:33:39.243 回答
3

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

而且我很确定您认为参数可以保证进入寄存器的假设也是错误的。

于 2013-04-16T15:30:34.857 回答
0

in C the first two int's are not passed into %rdi and %rsi... that is an ABI / Calling Convention issue... Not a language issue.

if the function does get inlined and the rest of the surrounding code permits it, the int's will likely be in a general purpose registers...

but this is absolutely not your concern... and if you care, you can just have the compiler generate the asm to read and learn from...

于 2013-04-16T17:17:07.607 回答