Which is faster : if (bool) or if(int)?

后端 未结 8 2132
离开以前
离开以前 2020-12-07 14:48

Which value is better to use? Boolean true or Integer 1?

The above topic made me do some experiments with bool and in

8条回答
  •  孤城傲影
    2020-12-07 15:04

    Yeah, the discussion's fun. But just test it:

    Test code:

    #include 
    #include 
    
    int testi(int);
    int testb(bool);
    int main (int argc, char* argv[]){
      bool valb;
      int  vali;
      int loops;
      if( argc < 2 ){
        return 2;
      }
      valb = (0 != (strcmp(argv[1], "0")));
      vali = strcmp(argv[1], "0");
      printf("Arg1: %s\n", argv[1]);
      printf("BArg1: %i\n", valb ? 1 : 0);
      printf("IArg1: %i\n", vali);
      for(loops=30000000; loops>0; loops--){
        //printf("%i: %i\n", loops, testb(valb=!valb));
        printf("%i: %i\n", loops, testi(vali=!vali));
      }
      return valb;
    }
    
    int testi(int val){
      if( val ){
        return 1;
      }
      return 0;
    }
    int testb(bool val){
      if( val ){
        return 1;
      }
      return 0;
    }
    

    Compiled on a 64-bit Ubuntu 10.10 laptop with: g++ -O3 -o /tmp/test_i /tmp/test_i.cpp

    Integer-based comparison:

    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m8.203s
    user    0m8.170s
    sys 0m0.010s
    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m8.056s
    user    0m8.020s
    sys 0m0.000s
    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m8.116s
    user    0m8.100s
    sys 0m0.000s
    

    Boolean test / print uncommented (and integer commented):

    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m8.254s
    user    0m8.240s
    sys 0m0.000s
    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m8.028s
    user    0m8.000s
    sys 0m0.010s
    sauer@trogdor:/tmp$ time /tmp/test_i 1 > /dev/null
    
    real    0m7.981s
    user    0m7.900s
    sys 0m0.050s
    

    They're the same with 1 assignment and 2 comparisons each loop over 30 million loops. Find something else to optimize. For example, don't use strcmp unnecessarily. ;)

提交回复
热议问题