[英]Behavior of variables initialized inside inline function
我对内联函数的初始化变量有疑问。 我在 function 中初始化了 5 个变量(使用round()
、 ceil()
和fabs()
),但问题是 CPU 需要大约 1500 个周期来计算它们的值。
一旦我将我的 function 声明为内联函数,程序和 CPU 似乎不再计算这些变量并且也在调试器中跳过它们(尽管在运行程序或其他东西之前计算它们时工作已经很好)。 检查总周期时,用于计算它们的 1500 个周期现在消失了!
问题:我的情况发生了什么? 为什么CPU忽略内联函数中的计算变量并在普通函数中计算它们?
编辑#1 :这就是我的意思:对于内联 function,当我输入 function 时,它直接转到突出显示的代码行,因为它是第一行,这是 go 到突出显示的代码行所需的周期数:
这里是正常的function,当我输入它时,它会直接正常逐行初始化每个变量。
提前致谢
一些库函数是内联的这一事实是无关紧要的,编译器可以在编译时评估任何纯代码并将其作为 object 代码中的常量缩减为结果。 对于给定的代码段执行多少取决于优化设置和性能以及由编译器实现者确定的阈值。
在您的情况下,当您将 function 声明为inline
时,编译器似乎可以优化这些初始值设定项的计算,这可能是因为您使用常量甚至文字值调用它。 初始化器可能是在编译时计算的,结果值在表达式中用作常量,甚至没有存储在局部变量中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.