実効アドレス【efficient address】
概要

コンピュータプログラムはメモリ上のデータを読み書きする命令を多数含んでいる。命令の中にアクセス先のアドレスを直接記述する方法もあるが、それだけでは柔軟なプログラムを作ることは難しい。例えば、配列の要素を順番に処理する場合、アクセスするアドレスはループのたびに変化するため、固定のアドレスをそのまま命令に埋め込む形では対応できない。
そのような場合に、基準となる値や相対位置(オフセット)などの情報を組み合わせてアドレスを表現する方法が用意されている。これを「アドレッシングモード」(アドレス指定方式)と呼び、代表的なものは「直接アドレス指定」「間接アドレス指定」「インデックスアドレス指定」などがある。これらの方式では、命令に含まれる値やレジスタの内容をもとに計算が行われ、その結果として求められるのが実効アドレスである。
例えば、「ベースアドレス指定」では、基点となるメモリ上の特定のアドレス(ベースアドレス)に、処理の進行に応じて変化するレジスタの値(インデックス)を加えることで、メモリ上の連続した領域に順番にアクセスすることができる。これは配列の各要素を順次処理するのに効率がよい。他にも、複数のレジスタの値を組み合わせるなど多様な算出方式が存在し、CPUのアーキテクチャ(基本設計)によって利用できるアドレッシングモードの種類は異なる。
なお、実効アドレスはあくまでプログラムが認識する仮想アドレス空間上のアドレスであり、現代のOSが採用する仮想メモリの仕組みのもとでは、このアドレスがさらにページテーブルを通じて物理メモリ上の実際の物理的な番地に変換され、メモリアクセスが行われる。アセンブリ言語によるプログラミングや低レベル(ハードウェア寄り)なプログラム開発では、実効アドレスの計算を意識しながらコードを記述することが性能やコード品質の向上に繋がる。