например имеем две переменных A и B
if A != B:
then вывод какой то информации
else еще какой то блок
если перед компиляцией/интерпретацией переменная это строка/символ который можно найти как текст то как компилированый код обращается к переменной если код компилирован/интерпретирован?
C/C++
Если в редакторе имя переменной это строковое значение то после компиляции при поиске переменная есть как адресс?
Переменная состоит из 3 компонентов:
имя (то, что ты называешь строкой) - существует только в исходном коде
адрес в памяти (указатель) - существует только в скомпилированном коде
значение - хранится по адресу переменной в памяти
В процессе компиляции имя заменяется адресом (это может быть фиксированный адрес или смещение относительно вершины стека или фрейма), а операции обращения к переменной языка высокого уровня заменяются на процессорные команды обращения к данным по адресу переменной.
В современных интерпретируемых языках исходный текст сначала компилируется в байт-код виртуальной машины, а только потом выполняется виртуальной машиной. И там может быть либо такая же замена имен переменных на адреса, либо в байт-коде сохраняются имена переменных. В последнем случае переменные в виртуальной машине хранятся, например, в виде ассоциативного массива с ключами - именами переменных.
имя (то, что ты называешь строкой) - существует только в исходном коде
адрес в памяти (указатель) - существует только в скомпилированном коде
значение - хранится по адресу переменной в памяти
В процессе компиляции имя заменяется адресом (это может быть фиксированный адрес или смещение относительно вершины стека или фрейма), а операции обращения к переменной языка высокого уровня заменяются на процессорные команды обращения к данным по адресу переменной.
В современных интерпретируемых языках исходный текст сначала компилируется в байт-код виртуальной машины, а только потом выполняется виртуальной машиной. И там может быть либо такая же замена имен переменных на адреса, либо в байт-коде сохраняются имена переменных. В последнем случае переменные в виртуальной машине хранятся, например, в виде ассоциативного массива с ключами - именами переменных.
преобразует в машинный код.. примерно так выглядит:
//if A!=B
mov eax,A ; A- адрес переменной
cmp dword ptr [b]
je $B ; A==B
; -- A!=b
@@:
//if A!=B
mov eax,A ; A- адрес переменной
cmp dword ptr [b]
je $B ; A==B
; -- A!=b
@@:
Имена переменных (а так же функций, названия операторов, синтаксис) - только для легкого понимания человеком. Все переменные и функции - это адреса в памяти, операции - последовательность машинных команд, каждая из которых в памяти представлена как некое число. Вот и выходит - одни лишь адреса и цифры, цифры и адреса. По этой причине чистый машинный код был понятен только у 4 битных "калькуляторов". А когда калькуляторам доверили разбирать этот код, стало возможным написание более сложных программ для серьезных компьютеров. И так далее.
Вроде бы те, кто придумывали компьютер и первые программы - отличные математики.
Вроде бы те, кто придумывали компьютер и первые программы - отличные математики.
Мне кажется, компиляция разная бывает. Варианты: до машинных команд, а, также, с сохранением классов
Похожие вопросы
- Записать значения чисел фиббоначи в переменные и вернутт одновременно три значения переменных.
- Для заданных с клавиатуры значений переменных x и n вычислить
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- При совершении арифметических операций с переданными в рекурсивную функцию переменными, переменные меняются(Си)
- Глобальная переменная. (Си)
- Как создать под-переменную в python?
- Где располагается нессылочная переменная в ссылочном объекте с++?
- Чему равно значение переменной, если ей присвоено значение, возвращенное функцией, которая ничего не возвращает? (+)
- Чем именно обрабатываются не регистровые переменные если регистровые обрабатываются регистрами?
- Зачем нужны переменные с припиской 16, 32 и т.д?