किस मूल्य का उपयोग करना बेहतर है? बूलियन सच है या Integer 1?
ऊपर विषय मेरे साथ कुछ प्रयोग कर बनाया bool
और int
में if
हालत। तो बस जिज्ञासा से बाहर मैंने यह कार्यक्रम लिखा:
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
प्रत्येक कार्य के लिए asm कोड बनाता है:
asm कोड के लिए
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
asm कोड के लिए
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
हैरानी की बात है, g(bool)
अधिक asm
निर्देश उत्पन्न करता है ! इसका मतलब यह है कि if(bool)
की तुलना में थोड़ा धीमा है if(int)
? मुझे लगता bool
है कि विशेष रूप से सशर्त बयान में उपयोग करने के लिए डिज़ाइन किया गया है if
, जैसे कि , मैं g(bool)
कम asm निर्देश उत्पन्न करने की उम्मीद कर रहा था , जिससे और g(bool)
अधिक कुशल और तेज़ हो।
संपादित करें:
मैं अब तक किसी भी अनुकूलन ध्वज का उपयोग नहीं कर रहा हूं। लेकिन यहां तक कि इसके अभाव में, यह अधिक asm उत्पन्न क्यों करता g(bool)
है एक प्रश्न है जिसके लिए मैं एक उचित उत्तर की तलाश कर रहा हूं। मुझे आपको यह भी बताना चाहिए कि -O2
अनुकूलन ध्वज वास्तव में एक ही asm उत्पन्न करता है। लेकिन यह सवाल नहीं है। सवाल वही है जो मैंने पूछा है।
g(bool)
एक सवाल है जिसके लिए मैं एक उचित जवाब की तलाश कर रहा हूं।