Не указано, относится ли эта ссылка к памяти. Если компилятор может определить, к какому объекту он относится, он может просто использовать ссылку в качестве альтернативного «имени» для этого объекта, без необходимости какой-либо информации времени выполнения. Если он не может, тогда ссылка должна будет содержать адрес своей цели, точно так же, как указатель.
Указатели - это объекты, поэтому они занимают память, как и любой другой объект. Однако оптимизация в соответствии с правилом «как будто» означает, что объекты должны занимать память только в том случае, если поведение программы зависит от их выполнения; например, если вы печатаете свой адрес. Поэтому, если компилятор может определить, к какому объекту указывает указатель, он может заменить косвенный доступ через указатель с прямым доступом к этому объекту и, возможно, полностью удалить указатель.
То же правило оптимизации означает, что в обоих примерах все переменные могут быть удалены, так как они не имеют никакого эффекта.
Оптимизация, специфичная для компилятора, возможно ... –
«Почему в некоторых книгах говорят, что ссылочные переменные не являются дополнительной памятью?» Потому что они не знают, о чем они говорят. Получите [лучшую книгу] (http://stackoverflow.com/questions/388242). (Кроме того, для примера, подобного этому, весь код, вероятно, удален, так как он ничего не делает). –
Семантически, ссылки не должны занимать память. У них, конечно, нет адреса. Но под капотом указатели могут использоваться при реализации, если это необходимо. Реализация может делать все, что ему нужно, для создания требуемой семантики. – juanchopanza