Как хранится имя переменной?

212
21 сентября 2017, 16:22

Помогите разобраться поглубже чем по сути является именованная ячейка памяти (переменная). Не могу правильно сформулировать свой вопрос, но т.е понимаю, что при хранения данных в блоке памяти выделяется место, но не понимаю как хранится именованная ее часть. К примеру:

int a = 5;

По сути начало блока памяти для числа 5 является первый его адрес, к примеру 0х0000132 но чем является переменная а? Его неким псевдонимом? Или блок памяти имеет кроме хранения значения еще и метаинформацию для хранения того же а?

Не хочу показаться тупым, но не может быть что а является ссылочным типом на int, который смотрит в этом случае на стек первого адреса значения 5?

Answer 1

На самом деле, у переменной может не быть адреса вовсе.

  • Если переменная используется лишь на небольшом участке, компилятор может эту переменную затолкать в регистр процессора и держать её там в течение всего времени её жизни, не выделяя ей место в оперативной памяти вовсе.

  • Если в программе используется лишь изначальное значение неменяющейся переменной, компилятор волен вставить вместо чтения этой переменной само значение. В качестве непосредственного (immediate) значения, прямо в генерируемый программный код.

  • Если переменная вообще не оказывает никакого влияния на ход программы и не торчит наружу, компилятор может выкинуть с корнем её, все операции над ней и все её значения.

Переменная это уровень языка. Она абстрактна. У вас есть имя, тип и область видимости, определённые языком. Всё. А при сборке компилятор уже сам разберётся, как реализовать это, чтобы программа вела себя соответственно своему исходному коду. Чем меньше требований вы к переменной предъявляете, тем больше у компилятора свободы к самовыражению своей оптимизаторской сущности.

Однако, компиляторы обычно реализуют возможность сборки с отладочной информацией, нужной для осмотра состояния программы в любой момент с помощью отладчика. Там название переменной и её местонахождение указано. Но это удобство компилятора для разработки, а не особенность языка и, что интересно, включение этого удобства может изменить реализацию переменной (см. опцию /ZI в MSVC).

READ ALSO
Что обозначает эта запись?

Что обозначает эта запись?

Что обозначает такая запись? поставило в тупик, применением "::" несколько раз

199
Как в Visual Studio создать и заполнить ресурс?

Как в Visual Studio создать и заполнить ресурс?

Ситуация такая, я переписывал пример из книги и там автор создает файл ресурса таким образом пишет файл resmc с таким содержимым:

249