Quelle valeur est préférable d'utiliser? Boolean true ou Integer 1?
Le sujet ci-dessus m'a fait faire des expériences avec bool
et int
en if
condition. Alors juste par curiosité, j'ai écrit ce programme:
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
génère du code asm pour chaque fonction comme suit:
code asm pour
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
code asm pour
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
Étonnamment, g(bool)
génère plus d' asm
instructions! Cela signifie-t-il que if(bool)
c'est un peu plus lent que if(int)
? J'avais l'habitude de penser qu'il bool
était spécialement conçu pour être utilisé dans des instructions conditionnelles telles que if
, donc je m'attendais g(bool)
à générer moins d'instructions asm, ce qui rendrait g(bool)
plus efficace et plus rapide.
ÉDITER:
Je n'utilise aucun indicateur d'optimisation pour le moment. Mais même son absence, pourquoi génère-t-elle plus d'ASM pour g(bool)
est une question pour laquelle je cherche une réponse raisonnable. Je dois également vous dire que l' -O2
indicateur d'optimisation génère exactement le même asm. Mais ce n'est pas la question. La question est ce que j'ai demandé.