使用虚拟函数代替IF语句会更快

Using virtual functions instead of IF statements is faster?

本文关键字:语句 IF 虚拟 函数      更新时间:2023-10-16

我记得在某个地方在线读到,在极低延迟的情况下,最好使用虚拟函数来代替IF语句。

这是真的吗?他们基本上是说动态多态性更适合速度情况吗?

有没有其他用户可以分享的C++低延迟"怪癖"?

我非常怀疑一个if/else语句会比使用虚拟函数慢:虚拟函数通常会强制管道暂停并限制优化机会。if语句可能会使管道停滞,但如果经常执行,则预测可能会正确进行。然而,如果您的选择是在几个if/else语句的级联之间,而不是只调用一个虚拟函数,那么后者可能会更快。此外,如果通过使用虚拟函数与分支执行的总代码是不同的,则函数最终会明显变小,这可能会导致指令高速缓存上很少有高速缓存未命中。也就是说,这取决于情况。最好的方法是测量。请注意,测量人工代码只是试图调查两种方法之间的差异,但并没有真正进行任何处理,这会产生误导性的结果。然而,当你需要生成非常低延迟的代码时,你通常可以花更多的时间来完成它,也就是说,尝试多种不同的方法可能是可行的。

尽管我的同事们倾向于反对我的模板方法来避免运行时分支,但我最终得到的代码通常编译速度很慢,但运行速度很快。当然,这取决于在编译时已知的函数或分支。在我使用过的领域中,例如消息处理,通常有一个动态决策就足够了,例如每个消息一个(即一个虚拟函数调用),然后是不涉及任何动态类型的处理(这仍然是条件,例如表中值的数量)。