xuxx13 2018-03-28 10:04 采纳率: 0%
浏览 1276
已结题

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

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

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-03-28 15:54
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug