小编Nat*_*hen的帖子

包含许多"if"的临界循环,其输出是常量:如何保存条件测试?

我的代码中有一个关键循环,具有以下形状:

int myloop(int a, .....){

   /* some stuff */

   // Critical loop
   while(...){
       /* Some Stuff */
       if(a == 1){
          // .....
       }
       else if(a == 2){
          // .....
       }
       else if(a == 3){
          // .....
       }
       else{
          // ....
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

由于循环从不接触"a"的值,所采用的分支永远不会改变,但由于此循环非常重,因此需要多次测试"a"的值,这是完全没必要的.最好的事情可能是复制循环,以便在循环开始之前可以测试"if",但这意味着复制了两种情况共同的许多东西,并且会导致非常难看的代码......

有没有办法要求GCC/G ++在编译时复制这段代码?或者任何其他技巧,以避免这么多次测试价值?

谢谢您的帮助 !

Nathann

c c++ optimization gcc g++

4
推荐指数
1
解决办法
363
查看次数

标签 统计

c ×1

c++ ×1

g++ ×1

gcc ×1

optimization ×1