当从 C 程序调用带有两个整数或指针参数的非inline
函数时,它们被传递到寄存器rdi
和rsi
. inline
是否可以通过将函数的整数/指针参数也传递到寄存器(而不是堆栈)的方式来完成编译?
3 回答
当一个函数被内联时,它被视为好像它的代码被写入了调用它的函数。发生这种情况时,根本不会传递参数。
当一个函数没有被内联时,它与普通函数完全没有区别。inline
只是提示编译器尝试内联函数;它根本不影响链接。
反问:你为什么在乎?我认为你不应该。那是你的编译器工作。如果你不相信你的编译器在那里做正确的事情,你可能根本不应该使用一个。
而且我很确定您认为参数可以保证进入寄存器的假设也是错误的。
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...