Qual é mais rápido: if (bool) ou if (int)?
Qual valor é melhor usar? Booleano verdadeiro ou inteiro 1?
O tópico acima me fez fazer algumas experiências combool
eint
emif
condição. Por curiosidade, escrevi este programa:
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
gera código asm para cada função da seguinte maneira:
asm code forf(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 code forg(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
urpreendentemente,g(bool)
gera maisasm
instruções! Isso significa queif(bool)
é um pouco mais lento queif(int)
? Eu costumava pensarbool
foi especialmente projetado para ser usado em declarações condicionais, comoif
, então eu estava esperandog(bool)
para gerar menos instruções asm, tornandog(bool)
mais eficiente e rápido.
EDITAR
Não estou usando nenhum sinalizador de otimização a partir de agora. Mas mesmo na ausência dela, por que gera mais asm parag(bool)
é uma pergunta para a qual estou procurando uma resposta razoável. Também devo lhe dizer que-O2
flag de otimização gera exatamente o mesmo ASM. Mas essa não é a questão. A pergunta é o que eu perguntei.