No siempre, además que de no está garantizado que se "almacene" la dirección de memoria. Todo ello está a discreción del compilador.
Por ejemplo, para casos muy simples como este:
int a = 0;
int& b = a;
b++;
printf("%i", b);
Un buen compilador puede determinar que el anterior código es equivalente a:
int a = 0;
a++;
printf("%i", a);
que es más eficiente que:
int a = 0;
int* b = &a;
(*b)++;
printf("%i", *b);