Sobes.tech
Back to questions
Middle+
6

Где хранится память в горутинах?

Companies where asked
WaterWal

Answer from AI

sobes.tech AI

Память для горутин в Go выделяется в куче, а не на стеке, как в традиционных потоках ОС. У каждой горутины есть свой стек, но он динамически растёт и уменьшается по мере необходимости, начинаясь с очень маленького размера (около 2 КБ). Это позволяет эффективно использовать память и запускать тысячи горутин одновременно.

Стек горутины управляется рантаймом Go, который перемещает данные между стеком и кучей, если стек становится слишком мал. Основные данные горутины (локальные переменные, параметры функций) хранятся в её стеке, а объекты, выделенные через new или make, — в куче.

Пример:

func example() {
    x := 10 // хранится в стеке горутины
    y := new(int) // выделяется в куче
    *y = 20
    fmt.Println(x, *y)
}

Таким образом, память горутины — это её стек (динамический, небольшой) и куча, общая для всех горутин, где хранятся объекты с динамическим временем жизни.