Welcher Wert ist besser zu verwenden? Boolean true oder Integer 1?
Das obige Thema hat mich dazu gebracht, einige Experimente mit bool
und int
in if
gutem Zustand durchzuführen . Aus Neugier schrieb ich dieses Programm:
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
generiert asm-Code für jede Funktion wie folgt:
ASM-Code für
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-Code für
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
Überraschenderweise g(bool)
generiert mehr asm
Anweisungen! Bedeutet das, dass if(bool)
das etwas langsamer ist als if(int)
? Früher dachte ich, dass bool
es speziell für die Verwendung in bedingten Anweisungen wie entwickelt wurde if
, also hatte ich erwartet g(bool)
, weniger asm-Anweisungen zu generieren, um dadurch g(bool)
effizienter und schneller zu werden.
BEARBEITEN:
Ich verwende derzeit kein Optimierungsflag. Aber selbst wenn es nicht vorhanden ist, warum es mehr Asm erzeugt, g(bool)
ist eine Frage, auf die ich nach einer vernünftigen Antwort suche. Ich sollte Ihnen auch sagen, dass das -O2
Optimierungsflag genau das gleiche asm generiert. Das ist aber nicht die Frage. Die Frage ist, was ich gestellt habe.
g(bool)
ist eine Frage, auf die ich nach einer vernünftigen Antwort suche.