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