Как компилятор golang перебрасывает значение переменной в кучу?
Прочитал статью на хабре Языковая механика escape analysis
но так и не понял один момент
Когда компилятор компилирует проблему он должен переписывает вместо переменных адреса в памяти.
Например вместо первой переменной ставит адрес 0000 вместо второй 0008 (если первая занимает 8 байт) это что касается стека
Но поидеи адреса в куче выделяются ОС во время выполнения программы, как тогда компилятор на стадии компиляции может знать по какому адресу в куче он разместит переменную?
И будут ли переменные которые он решил перекинуть в кучу уже на стадии компиляции заменяны адресами или там будет какой то механизм по типу указателей, но только на каком то внутреннем уровне, а для программиста они так и останутся переменными?
Пример из видео. Мы вызываем функцию и внутри нее создаем переменную ссылку на которую потом возвращаем. Если переменная создастся в стеке функции answer когда мы из нее выйдем она фактически станет невалидная и может быть затерта чем то еще, поэтому логично что под переменную х выделяется адрес в куче
https://www.youtube.com/watch?v=ZMZpH4yT7M0
