我记得在网上读到过,在极低延迟的情况下,最好使用虚拟函数来代替 IF 语句。
这是真的?他们基本上是说动态多态性对于速度情况更好吗?
是否有用户可以分享其他 C++ 低延迟“怪癖”?
我非常怀疑单个 if/else 语句会比使用虚拟函数慢:虚拟函数通常会强制管道停顿并限制优化机会。 if 语句可能会使管道停止运行,但如果经常执行该语句,则预测可能会按正确的方式进行。但是,如果您的选择是在级联几个 if/else 语句与仅一个虚拟函数调用之间进行选择,那么后者可能会更快。此外,如果通过使用虚拟函数与分支执行的总代码不同,函数最终会小得多,则可能会导致指令高速缓存上很少有高速缓存未命中。也就是说,这取决于情况。最好的方法是测量。请注意,测量人工代码只是试图研究两种方法之间的差异,但实际上并没有进行任何处理,会产生误导性的结果。然而,当您需要生成非常低延迟的代码时,您通常可以花费更多时间来完成它,即尝试多种不同的方法可能是可行的。
尽管我的同事往往不赞成我使用模板方法来避免运行时分支,但我最终得到的代码通常编译速度非常慢,但运行速度却非常快。当然,这取决于编译时已知的所使用的函数或分支。在我使用过的领域,例如对于消息处理来说,通常有一个动态决策就足够了,例如每条消息(即一个虚拟函数调用)一个,然后是不涉及任何动态类型的处理(这仍然是有条件的,例如表中值的数量)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)