2017-08-08 21 views
-1

看:性能函数调用VS乘以1点

float process(float in) { 
    float out = in; 

    for (int i = 0; i < 31; ++i) { 
    if (biquads_[i]) { 
     out = biquads_[i]->filter(out); 
    } 
    } 

    return out; 
} 

biquads_std::optional<Biquad>[31]

在这种情况下,我检查每个可选项以检查它是否为空,然后调用biquad的过滤函数,如果我无条件地调用过滤函数,将其改为乘以1或仅返回输入值,更高效?

+2

你能详细说明一下吗?如果我无条件地调用过滤函数,改变它乘以1或者只是返回输入值,会更有效率吗?*更多? – NathanOliver

+1

我没有任何数字来支持它,但我会说性能会非常相似,而且你现在做的方式比替代方式更清晰。 –

+2

通过显示编译器为这两种情况生成的汇编语言,可以更好地了解性能。 –

回答

2

最有可能的是它不会造成差别的缩小(尽管有些猜测,因为你的问题并不完全清楚)。出于两个原因:1)除非代码将用于热路径,否则即使一种方法比另一种快几个纳秒,也不会有问题。 2)很可能你的编译器优化器足够聪明,可以生成在两种情况下执行接近(如果不相同)的代码的代码。你测试过了吗?你测试过吗?如果不;这样做 - 优化启用。努力编写清晰,可读,可维护的代码。以后担心微观优化,当你确实遇到问题时,你的分析器将你的功能作为热点。