Каждая горутина имеет свой стек, который начинается маленьким (несколько KB) и растёт динамически — Go использует segmented/copyable стеки. Стек — для локальных переменных, быстрое выделение/освобождение. Куча — для всего, что пережиёт функцию: то, что вернули по указателю, передали в канал, захватили в замыкании. Компилятор через escape analysis решает, где аллоцировать. Куча управляется GC, стек освобождается при возврате из функции. Цель — максимум на стеке, минимум на куче.
Как устроена память в Go — стек и куча?
Middle+
535 просмотровAFK Offer AI
Как спроектировать notification service?