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 boolet inten ifcondition. 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: retcode 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' asminstructions! 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' -O2indicateur 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é.