Welcher Wert ist besser zu verwenden? Boolean true oder Integer 1?
Das obige Thema hat mich dazu gebracht, einige Experimente mit boolund intin ifgutem 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: retASM-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 asmAnweisungen! Bedeutet das, dass if(bool)das etwas langsamer ist als if(int)? Früher dachte ich, dass booles 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 -O2Optimierungsflag 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.