使用虚拟函数代替IF语句会更快
Using virtual functions instead of IF statements is faster?
我记得在某个地方在线读到,在极低延迟的情况下,最好使用虚拟函数来代替IF语句。
这是真的吗?他们基本上是说动态多态性更适合速度情况吗?
有没有其他用户可以分享的C++低延迟"怪癖"?
我非常怀疑一个if/else语句会比使用虚拟函数慢:虚拟函数通常会强制管道暂停并限制优化机会。if语句可能会使管道停滞,但如果经常执行,则预测可能会正确进行。然而,如果您的选择是在几个if/else语句的级联之间,而不是只调用一个虚拟函数,那么后者可能会更快。此外,如果通过使用虚拟函数与分支执行的总代码是不同的,则函数最终会明显变小,这可能会导致指令高速缓存上很少有高速缓存未命中。也就是说,这取决于情况。最好的方法是测量。请注意,测量人工代码只是试图调查两种方法之间的差异,但并没有真正进行任何处理,这会产生误导性的结果。然而,当你需要生成非常低延迟的代码时,你通常可以花更多的时间来完成它,也就是说,尝试多种不同的方法可能是可行的。
尽管我的同事们倾向于反对我的模板方法来避免运行时分支,但我最终得到的代码通常编译速度很慢,但运行速度很快。当然,这取决于在编译时已知的函数或分支。在我使用过的领域中,例如消息处理,通常有一个动态决策就足够了,例如每个消息一个(即一个虚拟函数调用),然后是不涉及任何动态类型的处理(这仍然是条件,例如表中值的数量)。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 我似乎对if/else的基本语句有问题:/
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果中的多个语句是否与多个 if 相同?
- C++ If/Else 语句被跳过
- 使用语句if时逻辑的问题
- 如何添加语句if-else
- 如何将语句if(isalpha(c))从c++转换为MIPS ?
- 在if语句if C++中创建对象时出现作用域问题
- if语句-if/else和参数放置C++