それらはまったく同じではありません。レジスタは、CPUが実際に処理している値が置かれている場所です。CPUの設計では、値がレジスタ内にある場合にのみ、実際に変更またはその他の方法で動作することができます。したがって、レジスタはロジックを使用できますが、メモリ(キャッシュを含む)は、CPUが読み書きする値のみを保持できます。
大工が働いていると想像してください。彼は手にいくつかのアイテム(レジスタ)を持っています。そして、頻繁に作業しているワークベンチ(キャッシュ)に非常に近いですが、この瞬間、そしてワークショップ(メインメモリ)に関連するものプロジェクトは手元にありますが、すぐにワークベンチに置くほど重要ではありません。
編集:ここでは、レジスタロジックの仕組みについて簡単に説明します。
R1..R4という名前の4つのレジスタがあるとします。次のようなステートメントをコンパイルする場合:
x = y + z * 3;
コンパイラは、(逆アセンブルされたときに)次のようなマシンコードを出力します。
LOAD R1, ADDRESS_Z //move the value of Z into register 1
MUL R1, 3 //multiply the value of register 1 by 3
LOAD R2, ADDRESS_Y //move the value of Y into register 2
ADD R1, R2 //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X
最新のCPUのほとんどは32ビットまたは64ビット幅のレジスタを持っているため、保持できるサイズまでの任意の値で計算を行うことができます。値が小さい場合、特別なレジスタは必要ありません。レジスタの一部のみを使用するように指示する特別なASM命令を使用するだけです。そして、両手だけの大工のように、レジスターは一度に少量のデータしか保持できませんが、それらは再利用でき、アクティブなデータを入出力します。つまり、「多くのレジスター」は最終的に必要になります。(もちろん、多くのコードを用意しておけば、コンパイラはより高速なコードを生成できますが、厳密に必要というわけではありません。)