我应该用c ++来内联吗?

时间:2012-07-18 13:35:05

标签: c++ optimization

我不确定是否应该内联:

float bm_softlight (float a, float b) {
    float Da = (a > 0.25f) ? sqrt (a) : ((16*a - 12) * a + 4) * a;
    return (b > 0.5f) ? Da*(2*b - 1) + 2*a*(1-b) : 2*a*b + a*a*(1-2*b);
}

能够并且应该内联的功能是否足够简单?

由于

3 个答案:

答案 0 :(得分:4)

内联时没有具体的答案。 Inline只是编译器的一个提示。所以它可能会忽略它,或者它可能没有提示就内联。

如果内联表现可能会增加或减少。性能可能降低的原因之一是内联增加了代码的一面,并且它可能变得不那么缓存友好。您应该尝试使用和不使用inline的代码来说明它是否有效。

在找到瓶颈之前不要进行优化

答案 1 :(得分:3)

由于现代编译器的优化,inline的使用并不那么明显和透明。有时编译器会自动生成一个内联的小函数,即使它没有声明。另一方面,即使你声明它是有效的,有时它也不会使函数内联。

你不能真正告诉你,因为你无法分辨出什么是不那么容易:函数调用,或者复制代码(你可以,也许,但这一目标并不容易)。另一方面,编译器可以很好地管理它。

另外,请记住Donald Knuth的名言:

  

过早优化是所有邪恶的根源(或者至少是大部分的   它在编程中。

答案 2 :(得分:1)

我认为sqrt和条件比额外通话要多得多。无论如何,inline只是一个提示。

如果您想将实现与源文件分开,那么无论您是否指定inline都没有区别。

如果您将定义保留在标题中,则必须将该函数声明为inline以防止多个定义。这并不是说函数实际上是内联的。