Хранится ли в памяти переменная ссылочного типа?

Не могу понять хранится ли ссылка в принципе в памяти? Смущает тот момент, что мы ее объявляем - а это значит, что технически мы резервируем под нее место в памяти. С другой стороны не инициализированных ссылок не бывает. введите сюда описание изображения


Ответы (2 шт):

Автор решения: gbg

Если сократить ответы на аналогичный вопрос на en-SO, дела обстоят так:

  1. Стандарт языка только описывает, как ссылка должна себя вести.
  2. Из п. 0 следует, что конкретная реализация ссылки полностью лежит на плечах разработчика компилятора, он может разворачивать ссылки на этапе компиляции (то есть, заменять их на то, куда они ссылаются), если у него это получится, а может и хранить их явно в памяти
  3. Если компилятор избрал явное хранение ссылки в памяти, она займет столько же места, сколько указатель. Но это не точно - см. п. 1.
→ Ссылка
Автор решения: AlexGlebe

Переменная int a ; с автоматическим местом хранения. Это значит, что если берётся адрес переменной и передаётся другой функции, то компилятор выделит место в памяти под своё усмотрение и передаст адрес. Если компилятору нет необходимости для выделения памяти этой переменной, то вполне без выделения памяти он этот код сделает.

У переменной типа ссылка программист не имеет права взять его адрес. А если попытается, то получит адрес куда указывает эта ссылка. То-есть расположение ссылки в памяти полностью зависит от компилятора. Он может хранить в стеке, в глобальной константной переменной (адреса ссылки), или вшитыми адресами в коде.

int a = 5;
int & aref = a ;

Если вы попытаетесь вывести на экран адрес переменной a, то этой переменной выделиться место в стеке. А если выводите адрес ссылки, то выведится адрес этой-же переменной a. Место куда хранить ссылку не понадобиться. И скорее всего эта ссылка будет служить просто синонимом переменной a.

→ Ссылка