Как будет происходить инициализация value type на низком уровне?
возник вопрос, как работает память с value type на низком уровне.
Допустим мы создаем переменную
var first = 5
Получается, что в стеке у нас будет храниться значение, а в коде адрес на место в стеке (смещение).
Объявим вторую переменную
var second = first
Как будет происходить инициализация на низком уровне? Перейдем по смещению в стеке и возьмем значение?
Если допустил какие-то ошибки - прошу поправить. Также буду благодарен, если подбросите книгу/статью на эту тему
Ответы (1 шт):
В целом Вы правильно понимаете как это будет работать. Компилятор знает количество и размер всех локальных переменных. Для каждой переменной он определит её смещение в стековом кадре. После этого компилятор будет оперировать уже не обращением к объекту, а смещением на стеке. В начале процедуры будут созданы операции, записывающие в адрес локальной переменной начальное значение. В некоторых случаях компилятор может посчитать что для переменной достаточно выделить регистр чтобы не работать с оперативной памятью. Почитать про это можно в любом учебнике по компиляторам.