我正在阅读这个问题Why is it faster to process a sorted array than an unsorted array?以及提供的最佳答案 Mysticial。答案很好地解释了正在发生的事情和原因,也说了这个:
那么可以做些什么呢?
如果编译器无法将分支优化为条件 如果你愿意牺牲,你可以尝试一些黑客攻击 性能可读性。
替换:
if (data[c] >= 128)
sum += data[c];
使用:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
这消除了分支并用一些按位替换它 操作
这段代码到底是做什么的,为什么它是等价的?
答案 0 :(得分:2)
它首先将比较转换为128减法。
然后结果的符号(减去是否低于128)被扩展为全零或全1,对于要添加的值and
,如果减法的结果为零,则将其归零负