Której wartości lepiej użyć? Wartość logiczna prawda czy liczba całkowita 1?
Powyższy temat mnie zrobić kilka eksperymentów z booli intw ifstanie. Tak więc z ciekawości napisałem ten program:
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 generuje kod asm dla każdej funkcji w następujący sposób:
kod asm dla
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: retkod asm dla
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
O dziwo, g(bool)generuje więcej asminstrukcji! Czy to znaczy, że if(bool)jest trochę wolniejsze niż if(int)? Kiedyś uważałem, że booljest specjalnie zaprojektowany do użycia w instrukcjach warunkowych, takich jak if, więc spodziewałem g(bool)się wygenerować mniej instrukcji asm, dzięki czemu będę g(bool)bardziej wydajny i szybki.
EDYTOWAĆ:
Na razie nie używam żadnej flagi optymalizacji. Ale nawet jego brak, dlaczego generuje więcej asm, g(bool)jest pytaniem, na które szukam rozsądnej odpowiedzi. Powinienem też powiedzieć, że -O2flaga optymalizacji generuje dokładnie to samo co m. Ale to nie jest pytanie. Pytanie brzmi, o co zadałem.