我记得在网上阅读过,在极端低延迟的情况下,最好使用虚函数代替IF语句。
这是真的吗?他们基本上说动态多态性对于速度情况更好吗?
是否有任何用户可以共享任何其他C ++低延迟“怪癖”?
答案 0 :(得分:8)
我非常怀疑单个if / else语句比使用虚函数要慢:虚函数通常会强制执行管道停顿并限制优化机会。 if语句可能会使管道停止,但如果经常执行,则预测可能会以正确的方式进行。但是,如果您的替代方案是在几个if / else语句的级联与仅一个虚函数调用之间,则后者可能更快。此外,如果通过使用虚拟功能与分支执行的总代码是不同的,则功能最终会小得多,这可能导致指令高速缓存上的高速缓存未命中。也就是说,这取决于具体情况。最好的方法是衡量。请注意,测量人工代码只是试图调查两种方法之间的差异,但实际上没有进行任何处理会产生误导结果。但是,当您需要生成非常低延迟的代码时,通常可以花更多的时间来提出它,即尝试多种不同的方法可能是可行的。
虽然我的同事倾向于对我的模板方法不屑一顾,以避免运行时分支,但我最终编写的代码编译速度非常慢,但运行速度非常快。当然,这取决于在编译时使用的函数或分支。在我使用过的地方,例如对于消息处理,通常有足够的动态决定,例如每个消息一个(即一个虚函数调用),然后是不涉及任何动态类型的处理(这仍然是条件,例如表格中的值的数量)。