Nilai mana yang lebih baik untuk digunakan? Boolean true atau Integer 1?
Topik di atas membuat saya melakukan beberapa percobaan dengan booldan intdalam ifkondisi. 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: retkode 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 asminstruksi! Apakah ini berarti if(bool)lebih lambat dari if(int)? Dulu saya pikir booldirancang 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 -O2tanda pengoptimalan menghasilkan persis sama dengan asm. Tapi bukan itu pertanyaannya. Pertanyaannya adalah apa yang saya tanyakan.