всякие C-вещи и сравнение с асмовым кодом? Ты мне тогда говорил, что хочешь видеть настоящую локальную переменную, чтобы она исчезла после выхода из функции?
Сегодня я вчитывался в сишный доки на предмет declarations и definitions. Моё сознание в этом вопросе подверглось структурному преобразованию. И уже в свете новых переосмыслений я отвечу так: наши представления о том, что переменная "возникает" и "исчезает" является призраком наших взглядов. В плане компилятора, "возникает" означает "начинаю работать с этой ячейкой памяти, когда вижу такой-то идентификатор". И наше "исчезает" -- означает компиляторное "этот адрес свободен для моих нужд".
Поэтому твое "хочу видеть настоящую локальную переменную, исчезающую после выхода из функции" следует понимать так: "я работаю с сишной программой, я вышел из функции, опять вошёл внутрь функции, внутри функции опять переопределилась переменная, прошлое значение исчезло; а если я буду пытаться обратиться к переменной из-за пределов функции, то компилятор генерирует ошибку". То есть, именно поведение переменной будет в точности таким, каким описывается стандартом.
Что касается асмового поведения в отношении переменных. Я рискну заявить, что:
1) переменных в асме нет; есть символы, которые связаны с ячейкой памяти.
2) в асме ничто не исчезает; есть некая ячейка памяти, она никуда не девается.
Вывод: понятия "исчезает", "возникает" являются сущностями языков высокого уровня, существуют как виртуальные понятия (кои мы совершенно естественно воспринимаем как реально существующие). В плане переноса терминов ЯВУ в область асма следует проявлять здравость, не требуя от компилятора делать то, что является плодом нашего воображения и взаимных соглашений.
Ну да, по факту разница между локальной и статической переменной в том, что локальная переменная не существует как детерменированная сущность. Любая ячейка памяти на стеке может в определённый момент времени стать этой самой переменной
Обсуждают сегодня