小弟在写一个项目的时候遇到了这个问题,代码速度始终慢很多。windows下,QT5.7.1,用的是msvc编译器,这面这个函数执行1000次,耗时大约500ms,
int test(int a)
{
std::vector ll(100);
int b = 5;
for(int i=0;i {
for(int j=1;j if( j>65)
{
b++;
std::vector s(1);
}
}
}
return b;
}
,而当把代码改为
int test(int a)
{
std::vector ll(100);
int b = 5;
for(int i=0;i {
for(int j=1;j if( j>65)
{
b++;
//std::vector s(1);
}
}
}
return b;
}
耗时变成了0ms。
在mingw编译器下,则无这个问题,全都是0ms。我怀疑msvc下,是分支预测失败了很多次。那位大手子给分析一下,这个时间差距是什么导致的。if语句那里,改为
if(j<65)
{
}
else
{
b++;
std::vector s(1);
}
这样也没有作用,求大佬解答一下在msvc下,如何提升运行速度,非常感谢!(windows,msvc下 ,#define likely(x) __builtin_expect(!!(x),1) 宏用不了)
需要用ida pro反编译以后分析下,看下代码分支偏移是不是过大,导致缓存命中失效。另外是不是用了debug版本,它会将所有代码都编译,方便下断点。
最大的可能是被编译器编译给优化了,你可以断点,看看反编译汇编代码,或者关掉编译优化试试