对于现代硬件上的典型现代编译器,? :
运算符结果会产生影响指令管道的分支吗?
换句话说,调用这两种情况以避免可能的分支,哪个更快:
bool testVar = someValue(); // Used later.
purge(white);
purge(black);
或者选择实际需要清除的部分并仅由操作员进行?:
:
bool testVar = someValue();
purge(testVar ? white : black);
我意识到您不知道 purge() 需要多长时间,但我只是在这里问一个一般性问题,关于我是否想要调用 purge() 两次以避免代码中可能出现分支。
我意识到这是一个非常微小的优化,可能没有真正的区别,但仍然想知道。我期望?:
不会导致分支,但想确保我的理解是正确的。
取决于平台。具体来说,取决于CPU的跳转预测表的大小以及CPU是否允许条件操作(如ARM)。
具有条件操作的 CPU 强烈支持第二种情况。具有较大跳转预测表的 CPU 将倾向于第一种情况。
真正的答案(就像任何其他性能问题一样):测量和比较。有时,代码的其余部分会出现曲线球,通常无法预测某些更改的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)