コンパイル原理プロセスと中間コード最適化の簡単な説明

1.コンパイルプロセスの図は次のとおりです。
詳細については、公式アカウント「コード雑多フォーラム」に注目してください!
ここに画像の説明を書きます

字句解析の役割: 単語を見つけること。int a=b+c など; 結果は: int、a、=、b、+、c および;
構文分析機能: 式、プログラム セグメント、ステートメントなどを検索します。たとえば、 int a=b=c; の構文解析結果は、 int a=b+c というステートメントになります。
意味解析機能:型が一致するかどうかなどを確認します。
詳しくは公開アカウント「コード雑フォーラム」にご注目ください!
2.中間コードの最適化

いわゆるコードの最適化とは、プログラム コードの同等の (プログラムの実行結果が変わらないことを意味する) 変換を指します。プログラム コードには、中間コード (4 値コードなど) またはオブジェクト コードが含まれます。等価性の意味は、変換後のコードの実行結果が変換前のコードの実行結果と同じになることです。最適化の意味は、最終的に生成されるターゲット コードが短くなり (実行時間が短くなり、占有スペースが小さくなり)、時空間効率が最適化されることです。原則として、最適化はコンパイルのさまざまな段階で実行できますが、最も重要なタイプは、特定のコンピューターに依存しない中間コードの最適化です。

最適化の目的: プログラムの実行効果を変えることなく、コンパイルされたプログラムに対して同等の変換を実行し、より効率的なオブジェクト コードを生成できるようにする。

最適化の原則:

等価性の原理。最適化後は、プログラムの動作結果が変わってはいけません。
等価性の原理。最適化後に生成されたオブジェクト コードの実行時間は短くなり、占有される記憶領域も小さくなります。
費用対効果の高い原則。より良い最適化結果は、できる限り低コストで達成される必要があります。
詳しくは公開アカウント「コード雑フォーラム」にご注目ください!

添付:

ループ最適化コード抽出
ループ入口に基本ブロックを設定し、ループ内のループ不変演算を基本ブロックにリフトし、リフトした部分がループ出口で必要な演算である必要があります。図に示すように:

ここに画像の説明を書きます

PS:
1. コードの最適化は、ターゲット プログラムの効率を向上させるためにプログラムに対して同等の変換を実行することです。通常は中間コードのみが最適化されます。通常、これには、制御フロー分析、データ フロー分析、変換の 3 つの部分が含まれます。
2. プログラムの基本ブロックに基づいて、基本ブロック内の最適化を局所最適化、基本ブロック全体の最適化を大域最適化、ループ最適化は大域最適化の一部であるループ単位の最適化と呼ばれます。
3. 共通部分式の削除、コピー伝播、不要なコードの削除、コードの外部化、強度の弱化、および誘導変数の削除は、一般的に使用されるローカルまたはグローバル コード最適化手法の一部です。
詳しくは公開アカウント「コード雑フォーラム」にご注目ください!

おすすめ

転載: blog.csdn.net/qq_34417408/article/details/78126087