Как стать автором
Обновить

Комментарии 14

В самом начале вместо 12го слайда затесался 18й

А вместо 18го - 12й

Поправил, спасибо большое!

Например, если у вас лаптоп на Linux 64 bit, то у вас арена будет весить 64Mb.

Получается простой «Hello World» может есть минимум 64 Мб
Если происходит аллокация, а судя по этому
Значение передается в аргумент типа interface{} — аргумент fmt.Println;

Она происходит

Да, но не забывайте, что это виртуальная память, а не физическая :)

Каюсь забыл про это)
Но тем не менее эти 64 Мб они же транслируются в физическую память
пусть даже и в swap
… если я не ошибаюсь

К сожалению, я могу говорить только за операционную систему Linux, и насколько я помню, физическая память возрастет только в том случае, если, мы словим при обращении к памяти page fault.
Кстати, это можно проверить с помощью команды ps ux -p
Выполнив эту команду обратите внимание на VSZ и RSS :)

То есть при первом создании переменной определенного размера пул выделит 8кб (и больше в зависимости от класса)?

Если я правильно понял ваш вопрос, то в случае с пулами(mspan) аллокатор не выделяет, а размечает в уже выделенной заранее области памяти :)

Спасибо за статью, пара вопросов:

Переменная 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

Увы, доклад, из за мер антиковида, был ограничен по времени в 30 минут. Поэтому, я потом старался рассказать на стенде Авито :)

Меня мучает один вопрос. Наверное, потому, что я что-то не понимаю. Вот golang использует горутины. Горутины запускаются в тредах. Тред - это системный "персонаж". То есть под него выделится стек 1–8 мегабайт. Горутина стартует со стеком в 2 килобайта, но для 64-битной архитектуры стек горутины может вырасти до 1 Гб. Горутина запускается в треде. Вопрос, как горутина со стеком в 1 Гб умещается в треде со стеком в 2 мегабайта?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий