🔴 Сложный · 3 очк. Массивы и слайсы
Есть ли утечка памяти: big := make([]byte, 1<<20); small := big[:10]; big = nil?
A Нет, GC освободит 1 МБ
B Да, small держит весь 1 МБ массив
C Нет, small хранит только 10 байт
D Зависит от GC
Объяснение вопроса

Да, здесь возможна утечка памяти. Переменная small - это подслайс, который ссылается на тот же базовый массив, что и big. Размер этого массива - 1 МБ. После big = nil на массив ссылается только small, но пока эта ссылка жива, сборщик мусора не может освободить весь массив. В памяти остаётся 1 МБ, хотя "нужны" только 10 байт. Решение: скопировать нужную часть в новый слайс: small := make([]byte, 10); copy(small, big[:10]), после чего big можно обнулить.

big := make([]byte, 1<<20)
small := big[:10]
big = nil  // массив всё ещё удерживается через small
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.