C语言 内联函数内部初始化的变量的行为

ni65a41a  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个关于内联函数初始化变量的问题。我在一个函数中初始化了5个变量(使用round()ceil()fabs()),但问题是CPU需要大约1500个周期来计算它们的值。
一旦我把函数声明为内联函数,程序和CPU似乎不再计算这些变量,并且在调试器中跳过它们(尽管在运行程序或其他东西之前计算它们时已经工作得很好)。当检查总周期时,用于计算它们的1500个周期现在消失了!

    • 问题:在我的例子中发生了什么?为什么CPU忽略inline函数中的计算变量,而在normal**函数中计算它们?
    • 编辑#1**:我的意思是:对于内联函数,当我输入函数时,它直接转到高亮显示的代码行,因为它是第一行,这里是转到高亮显示的代码行所需的周期数:

这是一个普通函数,当我输入它时,它会直接对每个变量进行逐行初始化。

先谢了

4nkexdtk

4nkexdtk1#

一些库函数是内联的这一事实并不重要,编译器可以在编译时评估任何纯代码,并将其还原为目标代码中的常量。对于给定的代码段,执行多少操作取决于优化设置和性能,阈值由编译器实现者确定。
在你的例子中,当你声明函数为inline时,编译器似乎可以优化这些初始化器的计算,可能是因为你用常量甚至是文字值调用它。初始化器可能是在编译时计算的,结果值在表达式中作为常量使用,甚至没有存储在局部变量中。

相关问题