Как мы получаем доступ к локальным переменным в c#
Чтож. Я пару дней назад посмотрел видос где сравнивались ссылочные и значимые типы. и в этом видосе была затронута тема stack. Я решил поподробнее изучить то как оно работает и узнал что стэк работает по принципу LIFO. но при этом же я пытался понять если перменные значимого типа сохраняются в стэке по принципу LIFO значит мы не можем достучаться до перемнной которая где-то в середине стэка. поэтому я пытался понять как мы можем обращаться к переменной которая была создана раньше чем самая последняя переменная. гуляя по инету я нашёл инфу о фрэйм стэке и то что в нём хранятся все локальные перменные и мы можем до любой из этих переменных достучаться через какой-то EBP. Вопрос заключается в следующем: Как мы можем обращаться к переменной которая была создана раньше самой последней созданной переменной если они сохраняются в стэке по принципу ЛИФО.
Ответы (1 шт):
Вы немного смешиваете логическую структуру данных "стек" (LIFO) и физическую организацию стека в памяти программы.
Да, стек памяти действительно работает по принципу LIFO - когда функция вызывается, в стек помещается ее стековый фрейм, содержащий локальные переменные, параметры, адрес возврата и т.д. Когда функция завершается, этот фрейм выталкивается (указатель стека возвращается назад).
Но внутри одного фрейма доступ к переменным не ограничен. Процессор может читать и писать любой байт в памяти, если знает его адрес.