Как компилятор golang перебрасывает значение переменной в кучу?

Прочитал статью на хабре Языковая механика escape analysis

но так и не понял один момент

Когда компилятор компилирует проблему он должен переписывает вместо переменных адреса в памяти.

Например вместо первой переменной ставит адрес 0000 вместо второй 0008 (если первая занимает 8 байт) это что касается стека

Но поидеи адреса в куче выделяются ОС во время выполнения программы, как тогда компилятор на стадии компиляции может знать по какому адресу в куче он разместит переменную?

И будут ли переменные которые он решил перекинуть в кучу уже на стадии компиляции заменяны адресами или там будет какой то механизм по типу указателей, но только на каком то внутреннем уровне, а для программиста они так и останутся переменными?

Пример из видео. Мы вызываем функцию и внутри нее создаем переменную ссылку на которую потом возвращаем. Если переменная создастся в стеке функции answer когда мы из нее выйдем она фактически станет невалидная и может быть затерта чем то еще, поэтому логично что под переменную х выделяется адрес в куче

https://www.youtube.com/watch?v=ZMZpH4yT7M0

Перемещение в кучу


Ответы (0 шт):