Такой вот общий вопрос, вызванный недостаточным знанием в области железной архитектуры.
Когда мы объявляем переменные, где они хранятся? Понятно, что в ячейках памяти, но как именно? Один символ в одной ячейке, второй в другой, потому всё это как-то собирается или как?
p.s.Да, и что нужно почитать (из актуального из книг или с какой архитектуры нужно начать) чтобы перестать задавать такие глупые вопросы?
Имя переменной нигде не хранится.
Если по простому то: компилятор преобразовывает имя переменной в адрес и далее везде где было имя в коде появляется адрес.
Если по сложнее, то для стековых переменных (локальные переменные функции) - это будет даже не адрес, а смещение относительно начала стека функции. А начало стека функции записано в один из регистров процессора. Адрес локальной переменной получается сложением регистра и смещения.
Для глобальных переменных - адрес. Но и тут несколько сложнее, т.к. реальный адрес появляется только после того как ОС загрузит программу в память и тут работают в паре загрузчик ОС и компилятор.
Замечу, книга отличная, но имеет небольшую проблему. В какой-то момент автор будто бы понимает, что немного заигрался в объяснение структуры работы транзисторов и процессоров, и уже ассемблер и программирование раскрывает как-то конспективно. Хотя, конечно, может это связанно с большой трудностью темы.
Имена переменных пишутся для человека-разработчика для удобства чтения и восприятия. Железке-процессору нужен только адрес этой переменной, имя ему ни к чему.
Для компилируемого языка (коим является Си) — в объектном файле (и будет выброшено, когда линкер соберёт EXE) и в отладочных данных. Больше нигде. Переменные различаем их адресом.
Возьми DosBox, возьми старый добрый Turbo Assembler и собери какой-нибудь COM-файл (пускай даже по руководству). А затем возьми хакерский просмотрщик типа Hiew и посмотри дизассемблер того, что получилось. Почему COM — потому что устроен он просто.