開発 レジスタ割り当てとは何ですか? -techopediaからの定義

レジスタ割り当てとは何ですか? -techopediaからの定義

目次:

Anonim

定義-Register Allocationはどういう意味ですか?

レジスター割り当てとは、レジスターへの変数の割り当て、およびレジスターへのデータの転送とレジスターからのデータの転送の処理を指します。 レジスタ割り当てが発生する場合があります。

  • ローカルレジスタ割り当てとして知られる基本ブロック
  • グローバルレジスタ割り当てと呼ばれる関数またはプロシージャ全体
  • 手続き間レジスタ割り当てとして知られる、コールグラフによって横断される関数の境界を越えて

Techopediaはレジスタ割り当てを説明します

コンパイルの過程で、コンパイラーは、変数を小さな特定の範囲のレジスターに割り当てる方法を決定する必要があります。 一部の変数は使用されていないか、同時に「ライブ」であると言われます。 これにより、複数の変数にいくつかのレジスタが割り当てられます。 それにもかかわらず、値を破壊することなく、2つの同時ライブ変数をまったく同じレジスタに割り当てることはできません。


一部のレジスタに割り当てることができない変数は、RAMに保存する必要があり、スピルと呼ばれる手順である各読み取りおよび書き込みごとにロードおよびロードする必要があります。 レジスタへのアクセスは、RAMへのアクセスよりもはるかに高速です。 さらに、コンパイルされたプログラムの実行時間を短縮します。 したがって、効率的なコンパイラは、できるだけ多くの変数をレジスタに割り当てることを目指しています。


通常、ほとんどのレジスタアロケーターは、すべての変数をメインメモリまたは中央処理装置(CPU)レジスタに割り当てます。 レジスタを使用する場合、速度は重要な利点です。 コンピューターはレジスタの範囲が有限であるため、利用可能なすべての変数をレジスタに割り当てることはできません。 変数をレジスタからメモリにシフトするプロセスはスピルと呼ばれ、変数をメモリからレジスタに移動する逆の手順はフィルと呼ばれます。 インテリジェントなレジスタ割り当ては、コンパイラにとって重要なステップです。


レジスタ割り当てには2つのタイプがあります。

  • ローカルレジスタ割り当て:これは、一度に1つの基本ブロック(またはハイパーブロックまたはスーパーブロック)を割り当てるプロセスです。 ローカルレジスタの割り当てにより速度が向上します。
  • グローバルレジスタ割り当て:ローカル割り当てを使用してレジスタの使用率が低い場合、グローバルレジスタ割り当てを使用することが重要です。 単純なグローバルレジスタ割り当てでは、最もアクティブな値がすべての内部ループに割り当てられます。 完全なグローバルレジスタ割り当てでは、手順を使用して、制御フローグラフ内のライブ範囲を識別し、ライブ範囲を割り当て、必要に応じて範囲を分割します。
レジスタ割り当てとは何ですか? -techopediaからの定義