>>816
int i;
int &r =i;

上の場合は確かに
>我々がインスタンスをもった変数と思っているものは
>コンパイラにとっては所詮アドレスにすぎず、
>同じアドレスと解釈される変数が増えただけという認識なのだが。
この通りだとは思うのですが,

void f(int & r){ r = 2; }

この場合は,rがどの変数のエイリアスであるかは実行時まで分からないですから

void f(int *const p){ *p = 2; }

とまったく等価(インターフェイスの差異を除いて)であり,
従って参照のdereferenceのオーバーヘッドがかかると思うのですが,どうなんでしょう?