全ての読み込みが終わるまで書き込みを遅らせる代わりに、その場所に関してふたつのコピーを用意し、一方に古い値を格納し、もう一方に新しい値を格納する。(プログラム上の順番で)新しい値を書き込む前の読み込みは古い値を格納した方を使い、書き込み後の読み込みは新しい値を格納した方を使用する。偽の依存性はなくなり、アウト・オブ・オーダー実行がさらに効果的に行われるようになった。古い値を必要とする読み込みが全て実行し終えたら、そのコピーを捨てればよい。これがレジスタ・リネーミングの基本的な概念である。
読み書き可能なものは何でもリネーミング可能である。一般には汎用レジスタや浮動小数点レジスタが議論されるが、フラグやステータスレジスタ、さらに個別のステータスビットまでリネーミングが可能である。
メモリもリネーミングが可能であるが、レジスタ・リネーミングのように一般的に行われているわけではない。
プログラムがレジスタの再利用をやめれば、レジスタ・リネーミングの必要はなくなる。
この手法には下記の問題がある。
コードサイズが増えるというのは重要で、そのために命令キャッシュでキャッシュミスが起きやすくなり、結果としてパイプラインがストールすることが多くなってしまう。（同じ命令キャッシュサイズの場合）
アーキテクチャ上のレジスタと実際のレジスタ.
これらはアーキテクチャ上のレジスタである。
以下では、レジスタ・リネーミングのふたつの手法を説明していく。これらはデータ格納回路の構成で区別される。
すべてのリネーミング手法では、命令が参照しているアーキテクチャ上のレジスタをタグに変換する。
リネームファイルはサイクル毎に命令を入力ポートから読み込んで、リネームを施した(若干長くなった)命令を出力ポートに出力する。
レジスタファイルはポート数の二乗に比例して回路が大きくなるため、物理的に大きく、電力も消費する。
またこの形式では、命令が実行ユニットに発行されると、ソースレジスタのタグが物理レジスタファイルに送られ、それらのタグに対応したレジスタの内容が実行ユニットに渡される。
各命令の各オペランドはそれらレジスタファイルのいずれかの場所に対応している。