私は私がこのようなコードでループ離れて最適化コンパイラを防ぐことを可能にするコンパイラフラグを探しています:C++や錆コードの両方でC++コンパイルとRustコンパイルの両方でループ最適化をオフにする方法はありますか?
void func() {
std::unique_ptr<int> up1(new int(0)), up2;
up2 = move(up1);
for(int i = 0; i < 1000000000; i++) {
if(up2) {
*up2 += 1;
}
}
if(up2)
printf("%d", *up2);
}
を。私はスピードの点で同様のコードセクションを比較しようとしています。全体的な結果を評価するのではなく、このループを実行することが重要です。 Rustは静的にポインタの所有権が移動されていないことを保証しているので、ループの各反復でヌルポインタチェックを行う必要はなく、ループを最適化できない場合理由。
錆は、LLVMバックエンドを使用してコンパイルするので、私はC++でも同様に使用することをお勧めします。
「volatile int i」を試してください。 – Unimportant
別のオプションを別のモジュールに置き、 '-O0'でコンパイルすることです – Devolus
そして、意図は何ですか?コンパイラがそのようなテストの理論上の結果を最適化できる場合、絶対に無駄です。だから、なぜこの仮説的な問題に時間を費やすのだろうか? – Klaus