1
非常に単純なコードからの「違法なハードウェア命令」
疑わしい主張を調査しながら、私はこの小さなテストプログラムを書きました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が明らかに未定義の動作専用の命令です。前述の「決して戻ることのない機能はUBです」という疑わしい主張が強化されています。まだ信じられないけど。本当に!?あなたは安全にスピンループを書くことができないのですか? だから私は私の質問だと思います: これは何が起こっているのか正しい読みですか? もしそうなら、誰かがそれを検証する公式のリソースを私に示すことができますか? このタイプの最適化を実行したい状況は何ですか? …