> Когда очищается память массива под слайсом в Go (Go)
Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
Память массива, лежащего в основе слайса, очищается сборщиком мусора (GC) в Go, когда на этот массив больше нет ни одной ссылки. Слайс - это дескриптор (указатель на массив, длина, ёмкость), а сам массив - это непрерывный блок памяти. Пока хотя бы один слайс ссылается на этот массив (даже если он "срезан" и видит только часть данных), массив считается живым и не будет собран. Очистка происходит автоматически в момент, когда все слайсы, использующие этот массив, выходят из области видимости или перестают быть достижимыми из корневых объектов программы. Например:
GOfunc example() {data := make([]int, 1000) // создаётся массив на 1000 intslice := data[10:20] // слайс ссылается на тот же массив// пока slice или data живы, массив не очищается}
После выхода из функции example обе переменные становятся недостижимыми, и GC при следующем цикле освободит память массива. Важно помнить: если вы создаёте маленький слайс из большого массива (например, slice := hugeArray[100:110]), то весь большой массив остаётся в памяти, пока жив этот маленький слайс. Чтобы избежать утечки, можно скопировать нужные данные в новый слайс через copy.
> Похожие задачи по Go
Является ли новый слайс после добавления элементов копией или ссылкой в Go
Можно ли внутри контейнера поднять другую операционную систему
Как выбирается канал при нескольких готовых сообщениях в select в Go
Есть ли общая память между разными процессами
> Похожие задачи по backend
Является ли новый слайс после добавления элементов копией или ссылкой в Go
Можно ли внутри контейнера поднять другую операционную систему
Как выбирается канал при нескольких готовых сообщениях в select в Go
Есть ли общая память между разными процессами
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью