> Когда очищается память массива под слайсом в Go (Go)

Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

Память массива, лежащего в основе слайса, очищается сборщиком мусора (GC) в Go, когда на этот массив больше нет ни одной ссылки. Слайс - это дескриптор (указатель на массив, длина, ёмкость), а сам массив - это непрерывный блок памяти. Пока хотя бы один слайс ссылается на этот массив (даже если он "срезан" и видит только часть данных), массив считается живым и не будет собран. Очистка происходит автоматически в момент, когда все слайсы, использующие этот массив, выходят из области видимости или перестают быть достижимыми из корневых объектов программы. Например:

GO
func example() {
data := make([]int, 1000) // создаётся массив на 1000 int
slice := data[10:20] // слайс ссылается на тот же массив
// пока slice или data живы, массив не очищается
}

После выхода из функции example обе переменные становятся недостижимыми, и GC при следующем цикле освободит память массива. Важно помнить: если вы создаёте маленький слайс из большого массива (например, slice := hugeArray[100:110]), то весь большой массив остаётся в памяти, пока жив этот маленький слайс. Чтобы избежать утечки, можно скопировать нужные данные в новый слайс через copy.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью