当前位置: 首页 > 科技观察

少写if-else,你知道它有多低效吗?

时间:2023-03-19 16:08:35 科技观察

if-else涉及到分支预测的概念。关于分支预测,在之前的文章《虚函数真的就那么慢吗?它的开销究竟在哪里?来看这4段代码!》ProgramMeow中大致提到过。让我在这里详细解释一下。先看一段经典代码,统计一下它的执行时间://test_predict.cc#include#include#includeintmain(){constunsignedARRAY_SIZE=50000;intdata[ARRAY_SIZE];constunsignedDATA_STRIDE=256;for(unsignedc=0;c=128)sum+=data[c];}}doubleelapsedTime=static_cast(clock()-start)/CLOCKS_PER_SEC;std::cout<>31;sum+=~t&data[c];方法二:使用表结构:#include#include#includeintmain(){constunsignedARRAY_SIZE=50000;intdata[ARRAY_SIZE];constunsignedDATA_STRIDE=256;for(unsignedc=0;c=128)?c:0;}std::sort(data,data+ARRAY_SIZE);{//测试部分clock_tstart=clock();longlongsum=0;for(unsignedi=0;i<100000;++i){for(unsignedc=0;c=128)sum+=data[c];sum+=lookup[data[c]];}}doubleelapsedTime=static_cast(clock()-start)/CLOCKS_PER_SEC;std::cout<