Что быстрее: if (bool) или if (int)?

Какое значение лучше использовать? Boolean true или Integer 1?

Вышеупомянутая тема заставила меня провести несколько экспериментов с bool и int в условии if . Поэтому просто из любопытства я написал эту программу:

int f(int i) 
{
    if ( i ) return 99;   //if(int)
    else  return -99;
}
int g(bool b)
{
    if ( b ) return 99;   //if(bool)
    else  return -99;
}
int main(){}

g ++ intbool.cpp -S генерирует asm-код для каждой функции следующим образом:

  • asm-код для f (int)

     __ Z1fi:
     LFB0:
     pushl% ebp
     LCFI0:
     movl% esp,% ebp
     LCFI1:
     cmpl $ 0, 8 (% ebp)
     je L2
     movl $ 99,% eax
     jmp L3
     L2:
     movl $ -99,% eax
     L3:
     Покидать
     LCFI2:
     Ret
    
  • asm-код для g (bool)

     __ Z1gb:
     LFB1:
     pushl% ebp
     LCFI3:
     movl% esp,% ebp
     LCFI4:
     subl $ 4,% esp
     LCFI5:
     movl 8 (% ebp),% eax
     movb% al, -4 (% ebp)
     cmpb $ 0, -4 (% ebp)
     je L5
     movl $ 99,% eax
     jmp L6
     L5:
     movl $ -99,% eax
     L6:
     Покидать
     LCFI6:
     Ret
    

Удивительно, но g (bool) генерирует больше инструкций asm ! Означает ли это, что if (bool) немного медленнее, чем if (int) ? Раньше я думал, что bool специально разработан для использования в условных операторах, таких как if , поэтому я ожидал, что g (bool) будет генерировать меньше инструкций asm, тем самым делая g (bool) более эффективным и быстрым.

РЕДАКТИРОВАТЬ:

На данный момент я не использую никаких флагов оптимизации. Но даже при его отсутствии, почему он генерирует больше asm для g (bool) - это вопрос, на который я ищу разумный ответ. Я также должен вам сказать, что флаг оптимизации -O2 генерирует точно такой же asm. Но вопрос не в этом. Вопрос в том, что я задал.


90
задан Community 23 May 2017 в 12:32
поделиться