【发布时间】:2018-01-16 07:07:02
【问题描述】:
看看这个函数:
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 或简单地返回输入值,将是效率更高?
【问题讨论】:
-
您能否详细说明如果我无条件调用过滤器函数,将其更改为乘以1或简单地返回输入值,会更有效吗? 更多?跨度>
-
我没有任何数据来支持它,但我想说性能会非常相似,而且你现在的做法比其他方法更清晰。
-
您可以通过显示编译器为这两种情况生成的汇编语言来更好地了解性能。
-
如果 *this 不包含值,则行为未定义。 其中 *this 指的是
optional对象。因此,不能无条件调用filter函数。 -
无条件调用过滤函数我的意思是更改为双二阶数组而不是可选数组。然后在 process 函数中删除 if (biquads_[i]).
标签: c++ performance real-time