msvc 编译器下 , if语句里不会执行的语句耗时巨大,如何提升代码运行时间 ? 5C

小弟在写一个项目的时候遇到了这个问题,代码速度始终慢很多。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) 宏用不了)

0

2个回答

需要用ida pro反编译以后分析下,看下代码分支偏移是不是过大,导致缓存命中失效。另外是不是用了debug版本,它会将所有代码都编译,方便下断点。

1

最大的可能是被编译器编译给优化了,你可以断点,看看反编译汇编代码,或者关掉编译优化试试

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!