Какое значение лучше использовать? 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: 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) более эффективным и быстрым.
EDIT:
Я пока не использую флаг оптимизации. Но даже отсутствие этого, почему он генерирует больше asm для g(bool), является вопросом, для которого я ищу разумный ответ. Я также должен сказать вам, что флаг оптимизации -O2 генерирует точно такой же asm. Но это не вопрос. Вопрос в том, что я спросил.