レジスタ割り付け
レジスタ割り付け(レジスタわりつけ、英: Register allocation)は、プログラム内の多数の変数を少数のCPUレジスタに多重化するコンパイラ最適化技法のひとつである。その目標は、プログラムの実行速度を最大化すべく、なるべく多くのオペランドをレジスタに保持するようにすることである。レジスタ割り付けは基本的なブロックについて行う場合(ローカルレジスタ割り付け)と関数やプロシージャ全体について行う場合(グローバルレジスタ割り付け)がある。レジスタ割り当てとも呼ぶ。
プログラムは、多数の様々なデータを処理することが多い。しかし、CPUの多くはデータを保持するのに使えるレジスタ数は限られている。機械語のオペランドとしてメモリを指定できる場合でも、なるべくレジスタを使った方が高速化される。従って、処理に必要なデータを RAMとレジスタの間で入れ替えてやる必要がある。この操作を spill(スピル、あふれ)と呼ぶ。
レジスタの spill は、マシンが持っているレジスタ数以上の変数が同時に必要とされる場合に発生する。一般にメモリはレジスタよりも遅いため、spill にはコストがかかる。