Nilai mana yang lebih baik untuk digunakan? Boolean true atau Integer 1?
Topik di atas membuat saya melakukan beberapa percobaan dengan bool
dan int
dalam if
kondisi. Jadi hanya karena penasaran saya menulis program ini:
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
menghasilkan kode asm untuk setiap fungsi sebagai berikut:
kode asm untuk
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
kode asm untuk
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
Anehnya, g(bool)
menghasilkan lebih banyak asm
instruksi! Apakah ini berarti if(bool)
lebih lambat dari if(int)
? Dulu saya pikir bool
dirancang khusus untuk digunakan dalam pernyataan bersyarat seperti if
, jadi saya mengharapkan g(bool)
untuk menghasilkan lebih sedikit instruksi asm, sehingga membuatnya g(bool)
lebih efisien dan cepat.
EDIT:
Saya tidak menggunakan tanda pengoptimalan apa pun untuk sekarang. Tetapi meskipun tidak ada, mengapa itu menghasilkan lebih banyak asm untuk g(bool)
adalah pertanyaan yang saya cari jawaban yang masuk akal. Saya juga harus memberi tahu Anda bahwa -O2
tanda pengoptimalan menghasilkan persis sama dengan asm. Tapi bukan itu pertanyaannya. Pertanyaannya adalah apa yang saya tanyakan.