【问题标题】:Parameter passing to Linux C inline functions将参数传递给 Linux C 内联函数
【发布时间】:2013-04-16 15:25:48
【问题描述】:

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

【问题讨论】:

    标签: c inline-functions


    【解决方案1】:

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

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

    【讨论】:

    • 更正,内联函数可能被内联,通常由编译器自行决定。
    【解决方案2】:

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

    而且我很确定你关于参数可以保证在寄存器中出现的假设也是错误的。

    【讨论】:

      【解决方案3】:

      在 C 中,前两个 int 没有传递到 %rdi 和 %rsi...这是 ABI / 调用约定问题...不是语言问题。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2012-01-04
        • 2018-09-26
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多