問題タブ [llvm-codegen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - Rust にポインターを非エイリアスとして扱うようにさせる方法はありますか?
次のポインターのエイリアシングの例:
次のアセンブリにコンパイルされます ( を使用-C opt-level=s
):
x
が 2 回逆参照されていることに注意してください。LLVM はそれを として扱っていませんnoalias
。私が最初に考えたのは、割り当てでポインターを使用することを避け、代わりに安全な参照を使用して (これらは「LLVM のスコープnoalias
モデルに従う」ため)、オプティマイザーにヒントを与えることでした。
しかし、残念ながら、これはまったく同じ結果をもたらします。safe_x
まだ 2 回逆参照されています。
このサンプルコードがばかげていることはわかっています。&i32
パラメーターは/に簡単に変更できます&mut i32
。または、一度逆参照x
して、割り当てに使用される一時変数に格納することもできます。ここのコードは、非常に単純なエイリアシング テストを意図したものであり、私の質問が求めているより広い視野に興味があります。
rust - 関数呼び出しが最適化されないようにするにはどうすればよいですか?
副作用のない関数が実行され、安定したRustで最適化されないようにするにはどうすればよいですか?
使用できる属性の組み合わせはありますか、それとも副作用のある別の関数を呼び出す必要がありますか? 関数呼び出しが必要な場合、Rust 標準ライブラリは最適化されないことが保証されている安価な関数を提供しますか?