假设我有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++;
}
但我不确定。哪一个更快?
答案 0 :(得分:3)
很难说没有尝试哪一个会更快,但是由于pipelining and branch prediction,没有分支的更慢的指令通常会更快。
在你的情况下,分支预测器在90%的时间都会出错,从而降低了速度。