Qubc
@Qubc
Ненавижу полисемию.

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

Такой вот общий вопрос, вызванный недостаточным знанием в области железной архитектуры.
Когда мы объявляем переменные, где они хранятся? Понятно, что в ячейках памяти, но как именно? Один символ в одной ячейке, второй в другой, потому всё это как-то собирается или как?
p.s.Да, и что нужно почитать (из актуального из книг или с какой архитектуры нужно начать) чтобы перестать задавать такие глупые вопросы?
  • Вопрос задан
  • 2107 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Имя переменной нигде не хранится.
Если по простому то: компилятор преобразовывает имя переменной в адрес и далее везде где было имя в коде появляется адрес.
Если по сложнее, то для стековых переменных (локальные переменные функции) - это будет даже не адрес, а смещение относительно начала стека функции. А начало стека функции записано в один из регистров процессора. Адрес локальной переменной получается сложением регистра и смещения.
Для глобальных переменных - адрес. Но и тут несколько сложнее, т.к. реальный адрес появляется только после того как ОС загрузит программу в память и тут работают в паре загрузчик ОС и компилятор.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@ferasinka
Чарльз Петцольд, Код. Тайный язык информатики
Ответ написан
TrueBers
@TrueBers
Гуглю за еду
Имена переменных пишутся для человека-разработчика для удобства чтения и восприятия. Железке-процессору нужен только адрес этой переменной, имя ему ни к чему.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Для компилируемого языка (коим является Си) — в объектном файле (и будет выброшено, когда линкер соберёт EXE) и в отладочных данных. Больше нигде. Переменные различаем их адресом.
Возьми DosBox, возьми старый добрый Turbo Assembler и собери какой-нибудь COM-файл (пускай даже по руководству). А затем возьми хакерский просмотрщик типа Hiew и посмотри дизассемблер того, что получилось. Почему COM — потому что устроен он просто.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы