【发布时间】:2013-04-16 15:25:48
【问题描述】:
当从 C 程序调用带有两个整数或指针参数的非inline 函数时,它们会在寄存器rdi 和rsi 中传递。是否可以通过将指向 inline 函数 的整数/指针参数也传递到寄存器中(并且不在堆栈上)的方式完成编译?
【问题讨论】:
标签: c inline-functions
当从 C 程序调用带有两个整数或指针参数的非inline 函数时,它们会在寄存器rdi 和rsi 中传递。是否可以通过将指向 inline 函数 的整数/指针参数也传递到寄存器中(并且不在堆栈上)的方式完成编译?
【问题讨论】:
标签: c inline-functions
当一个函数被内联时,它被视为其代码被写入调用它的函数中。发生这种情况时,根本没有传递参数。
当一个函数没有被内联时,它与一个普通函数完全没有区别。 inline 只是提示编译器尝试内联函数;它根本不影响链接。
【讨论】:
反问:你为什么在乎?我认为你不应该。那是你的编译器工作。如果您不相信您的编译器会在那里做正确的事情,那么您可能根本不应该使用它。
而且我很确定你关于参数可以保证在寄存器中出现的假设也是错误的。
【讨论】:
在 C 中,前两个 int 没有传递到 %rdi 和 %rsi...这是 ABI / 调用约定问题...不是语言问题。
如果函数确实被内联并且周围的其余代码允许它,则 int 可能会在通用寄存器中...
但这绝对不是你关心的问题......如果你关心,你可以让编译器生成 asm 来读取和学习......
【讨论】: