Помогите разобраться поглубже чем по сути является именованная ячейка памяти (переменная). Не могу правильно сформулировать свой вопрос, но т.е понимаю, что при хранения данных в блоке памяти выделяется место, но не понимаю как хранится именованная ее часть. К примеру:
int a = 5;
По сути начало блока памяти для числа 5
является первый его адрес, к примеру 0х0000132
но чем является переменная а
? Его неким псевдонимом? Или блок памяти имеет кроме хранения значения еще и метаинформацию для хранения того же а
?
Не хочу показаться тупым, но не может быть что а
является ссылочным типом на int
, который смотрит в этом случае на стек первого адреса значения 5
?
На самом деле, у переменной может не быть адреса вовсе.
Если переменная используется лишь на небольшом участке, компилятор может эту переменную затолкать в регистр процессора и держать её там в течение всего времени её жизни, не выделяя ей место в оперативной памяти вовсе.
Если в программе используется лишь изначальное значение неменяющейся переменной, компилятор волен вставить вместо чтения этой переменной само значение. В качестве непосредственного (immediate) значения, прямо в генерируемый программный код.
Если переменная вообще не оказывает никакого влияния на ход программы и не торчит наружу, компилятор может выкинуть с корнем её, все операции над ней и все её значения.
Переменная это уровень языка. Она абстрактна. У вас есть имя, тип и область видимости, определённые языком. Всё. А при сборке компилятор уже сам разберётся, как реализовать это, чтобы программа вела себя соответственно своему исходному коду. Чем меньше требований вы к переменной предъявляете, тем больше у компилятора свободы к самовыражению своей оптимизаторской сущности.
Однако, компиляторы обычно реализуют возможность сборки с отладочной информацией, нужной для осмотра состояния программы в любой момент с помощью отладчика. Там название переменной и её местонахождение указано. Но это удобство компилятора для разработки, а не особенность языка и, что интересно, включение этого удобства может изменить реализацию переменной (см. опцию /ZI
в MSVC).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Что обозначает такая запись? поставило в тупик, применением "::" несколько раз
Ситуация такая, я переписывал пример из книги и там автор создает файл ресурса таким образом пишет файл resmc с таким содержимым: