另外与比较

时间:2012-10-05 03:32:52

标签: c++ performance optimization micro-optimization

假设我有1,000,000个元素的数组,其中约有90%为0,10%为1。

为了数1,我可以做

sum=0;
for(int i=0;i<size;i++) {
    sum+=x[i]
}

但我认为比较可能比添加更便宜,所以这会更好。

sum=0;
for(int i=0;i<size;i++) {
    if(x[i]==1)
        sum++;
}

但我不确定。哪一个更快?

1 个答案:

答案 0 :(得分:3)

很难说没有尝试哪一个会更快,但是由于pipelining and branch prediction,没有分支的更慢的指令通常会更快。

在你的情况下,分支预测器在90%的时间都会出错,从而降低了速度。