উপরে বিষয়ে আমার সাথে কিছু পরীক্ষা-নিরীক্ষা করতে বাধ্য করেছে 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 উত্পন্ন করে। তবে প্রশ্নটি নয়। প্রশ্ন আমি কি জিজ্ঞাসা করেছি।