O tópico acima me fez fazer alguns experimentos com boole intem ifcondições. Então, apenas 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:
código ASM para
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: retcódigo ASM para
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
Surpreendentemente, g(bool)gera mais asminstruções! Isso significa que if(bool)é um pouco mais lento do que if(int)? Eu costumava pensar que boolera especialmente projetado para ser usado em instruções condicionais como if, portanto, esperava g(bool)gerar menos instruções asm, tornando-as g(bool)mais eficientes e rápidas.
EDITAR:
Não estou usando nenhum sinalizador de otimização no momento. Mas mesmo a ausência dela, por que gera mais g(bool)questionamento? É uma questão para a qual estou procurando uma resposta razoável. Devo também dizer que o -O2sinalizador de otimização gera exatamente o mesmo asm. Mas essa não é a questão. A questão é o que eu perguntei.
g(bool)questionamento? É uma questão para a qual procuro uma resposta razoável.