একটি সন্দেহজনক দাবি তদন্ত করার সময় , আমি এই ছোট পরীক্ষা প্রোগ্রামটি লিখেছিলামnoway.c
int proveit()
{
unsigned int n = 0;
while (1) n++;
return 0;
}
int main()
{
proveit();
return 0;
}
এটি পরীক্ষা করে, আমি পেয়েছি:
$ clang -O noway.c
$ ./a.out
zsh: illegal hardware instruction ./a.out
ওয়াত।
যদি আমি অপটিমাইজেশন ছাড়াই সংকলন করি তবে এটি প্রত্যাশার সাথে ঝুলছে। আমি সমাবেশটি দেখেছি এবং সমস্ত ঘণ্টা এবং শিস ছাড়াই main
ফাংশনটি এমন দেখাচ্ছে:
_main: ## @main
pushq %rbp
movq %rsp, %rbp
ud2
ud2
স্পষ্টতই যেখানে অনির্ধারিত আচরণের জন্য নির্দেশ রয়েছে apparent পূর্বোক্ত সন্দেহজনক দাবি, "এমন ফাংশন যা কখনই ফেরত না হয় ইউবি", তাকে আরও জোর দেওয়া হয়েছে। যদিও এখনও বিশ্বাস করা আমার পক্ষে কঠিন। সত্যিই !? আপনি নিরাপদে কোনও স্পিন লুপ লিখতে পারবেন না?
সুতরাং আমি অনুমান করি আমার প্রশ্নগুলি হ'ল:
- এটি কি চলছে তার সঠিক পড়া?
- যদি তা হয় তবে কেউ কি আমাকে এমন কোনও অফিসিয়াল রিসোর্সের দিকে নির্দেশ করতে পারে যা এটি যাচাই করে?
- এমন পরিস্থিতি কী যেখানে আপনি এই ধরণের অপ্টিমাইজেশনটি ঘটতে চান?
প্রাসঙ্গিক তথ্য
$ clang --version
Apple clang version 11.0.0 (clang-1100.0.20.17)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
int n = 0
===> unsigned int n = 0;
বা আরও উত্তম ..while (1);
unsigned int