Какое значение лучше использовать? Логическое истина или целое число 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: leave 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: leave LCFI6: ret
На удивление g(bool)
генерирует больше asm
инструкций! Значит ли это, что if(bool)
немного медленнее, чем if(int)
? Раньше я думал, что bool
он специально разработан для использования в условных операторах, таких как if
, поэтому я ожидал, что g(bool)
будет генерировать меньше инструкций asm, что сделает его g(bool)
более эффективным и быстрым.
РЕДАКТИРОВАТЬ:
На данный момент я не использую никаких флагов оптимизации. Но даже при его отсутствии, почему он генерирует больше asm для g(bool)
- это вопрос, на который я ищу разумный ответ. Я также должен вам сказать, что -O2
флаг оптимизации генерирует точно такой же asm. Но вопрос не в этом. Вопрос в том, что я задал.