Hangi değeri kullanmak daha iyidir? Boolean doğru mu, Tamsayı 1 mi?
Yukarıdaki başlık bana bazı deneyler yaptırdı boolve intiçinde ifkoşulu. Ben de meraktan bu programı yazdım:
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 aşağıdaki gibi her işlev için asm kodu üretir:
asm kodu
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 kodu
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
Şaşırtıcı bir şekilde, g(bool)daha fazla asmtalimat üretir ! Bundan if(bool)biraz daha yavaş olduğu anlamına mı geliyor if(int)? Eskiden boolözellikle koşullu ifadelerde kullanılmak üzere tasarlandığını düşünürdüm if, bu nedenle g(bool)daha az asm komutu üretmeyi bekliyordum , böylece g(bool)daha verimli ve hızlı hale getirmeyi bekliyordum .
DÜZENLE:
Şu an için herhangi bir optimizasyon bayrağı kullanmıyorum. Ama yokluğu bile, neden daha fazla asm üretiyor, çünkü g(bool)mantıklı bir cevap aradığım bir soru. Ayrıca -O2optimizasyon bayrağının tamamen aynı asm ürettiğini söylemeliyim . Ama soru bu değil. Soru sorduğum şey.