Когда я объявляю такую переменную Int x = 10
Правильный синтаксис в стандарте C ++ будет int x = 10;
Значение 10 будет назначаться по определенному адресу (например, 0x00001) в основной памяти
Значение 10 будет записано в ячейку памяти в стеке, да.
и когда я use x компилятор будет использовать значение, сохраненное в адресе (0x00001)
Компилятор не запускает ваш код, он компилирует его из исходного кода C ++ в исполняемый машинный код. Переменная x
существует только в вашем исходном коде. * Когда ваша программа скомпилирована, компилятор заменит все ссылки на x
адресом памяти, например, 0x00001
. Конечный исполняемый файл будет только работать в терминах адресов памяти. Таким образом, определение int x = 10;
станет машинным кодом, похожим на mov 10, 0x00001
. Реально, x
будет определяться не как абсолютная область памяти, а как смещение от базы текущего кадра стека.
И мой вопрос здесь Когда я использую переменную x, как процессор знать адрес x Это означает, что процессор знает, что переменная x имеет значение в адресе (0x00001)
Процессор понятия не имеет, что такое «переменная», и, конечно, понятия не имеет что ячейка памяти 0x00001
была названа x
до компиляции программы. Все, что ЦП когда-либо видит, - это адреса памяти.
* Компиляторы могут вставлять в исполняемые файлы дополнительную информацию, такую как имена переменных (именно так работают отладчики C ++), но это не связано с тем, как ЦП выполняет программу в обычном режиме. .