Back to questions
Wildberries
Junior — Middle
79
Какие типы памяти существуют и как они взаимодействуют между собой?
Companies where asked
Answer from AI
sobes.tech AI
В Go (Golang) основные типы памяти и их взаимодействие следующие:
-
Стек (Stack) — хранит локальные переменные функций. Стек быстро выделяется и освобождается при вызове и возврате из функций.
-
Куча (Heap) — используется для динамического выделения памяти, например, для объектов, которые живут дольше текущей функции. Go имеет сборщик мусора, который управляет очисткой кучи.
-
Глобальная/статическая память — для глобальных переменных и констант.
Взаимодействие:
- При вызове функции локальные переменные размещаются в стеке.
- Если переменная должна жить дольше, компилятор может «переместить» её в кучу (escape analysis).
- Сборщик мусора автоматически освобождает память в куче, когда объекты становятся недостижимыми.
Пример:
func foo() *int {
x := 10
return &x // x "убежит" в кучу, так как возвращается указатель
}
Здесь переменная x будет размещена в куче, чтобы указатель оставался валидным после выхода из функции.