Comments 14
В самом начале вместо 12го слайда затесался 18й
Например, если у вас лаптоп на Linux 64 bit, то у вас арена будет весить 64Mb.
Получается простой «Hello World» может есть минимум 64 Мб
Если происходит аллокация, а судя по этому
Значение передается в аргумент типа interface{} — аргумент fmt.Println;
Она происходит
Да, но не забывайте, что это виртуальная память, а не физическая :)
Но тем не менее эти 64 Мб они же транслируются в физическую память
пусть даже и в swap
… если я не ошибаюсь
То есть при первом создании переменной определенного размера пул выделит 8кб (и больше в зависимости от класса)?
Спасибо за статью, пара вопросов:
Переменная i2 ушла в хип. Почему так и на что это может повлиять ?
Потому что не влезла в стек?
Значение передается в аргумент типа interface{} — аргумент fmt.Println;
А с дженериками как дела обстоят?
Спасибо за статью
Вам спасибо, что прочитали :)
А с дженериками как дела обстоят?
Если я не ошибаюсь, судя по этому milestone , уходом в heap у дженериков хотят занятся в версии go 1.20
Потому что не влезла в стек
Не совсем, все дело в "indirection assignment". Я думаю вам проще будет загуглить и почитать, как часто его совершают и почитать почему компилятор себя так ведет. Что по поводу размера переменных, можно посмотреть вот здесь
Не совсем, все дело в "indirection assignment"
Ну так нечестно, написать про 3 случая когда уходим в heap, и не рассказать про четвёртый :)
Нашёл разбор примера из статьи, кому ещё будет интересно:
https://www.ardanlabs.com/blog/2018/01/escape-analysis-flaws.html
Меня мучает один вопрос. Наверное, потому, что я что-то не понимаю. Вот golang использует горутины. Горутины запускаются в тредах. Тред - это системный "персонаж". То есть под него выделится стек 1–8 мегабайт. Горутина стартует со стеком в 2 килобайта, но для 64-битной архитектуры стек горутины может вырасти до 1 Гб. Горутина запускается в треде. Вопрос, как горутина со стеком в 1 Гб умещается в треде со стеком в 2 мегабайта?
Go To Memory