C ++学習コンパイル最適化

一定の折りたたみ

定数式の値を定数として見つけ、それを最終的に生成されるコードに埋め込みます。

質問:非常に複雑な定数式の場合、コンパイラーは結果を計算してからコンパイルしますか?または、この式は完全にマシンコードに変換され、最終的にはプログラムに任されて解決されますか?

状況:

  • 関係する定数の折りたたみが言語仕様によって義務付けられているかどうか、またその場合、仕様に準拠するコンパイラーは定数の折りたたみを実行する必要があります。
  • それが前の項目を満たさない場合は、コンパイラー実装の品質に問題があります。コンパイラーは、定数の折りたたみ最適化を行うかどうかを自由に選択できます。同じコンパイラが異なる最適化レベルで動作するように構成されている可能性があります。おそらく、より低い最適化レベルで定数によって折り畳まれていない一部のコードは、より高い最適化レベルで最適化されます。

一定の伝播

次の例について考えてみます。

int x = 40;
int y = x + 2;

C言語やJava言語と同様に、yの初期式x + 2は、言語仕様レベルでは定数式として定義されません。しかし、私たちは直感的に、コンパイラーは定数についてもそれを折りたたむことができるはずだと感じています。

これには、一定の伝播最適化が必要です。

ただし、次のように、変数を複数回割り当てることができます。

int x = 40;
x = rand();
int y = x + 2;

一定の伝播を実現するには、「固定値への転送」転送データフロー分析(fastwordデータフロー分析)に依存して、固定値がどの使用ポイントに伝播できるかを判断する必要があります。

おすすめ

転載: www.cnblogs.com/CocoML/p/12727165.html