tgoop.com/go_interview_lib/323
Last Update:
💬 Можно ли утверждать, что после уменьшения размера среза в Go память, занимаемая оставшимися элементами, будет освобождена?
Срез состоит из трех компонентов: указателя на начало среза в массиве, длины среза и его емкости. Емкость среза указывает на максимальное количество элементов, которое срез может вместить, не требуя перераспределения памяти.
Когда мы уменьшаем размер среза, (например, s[:n]
, где n
меньше текущей длины среза s
), мы изменяем только длину среза, но не его емкость. Память, связанная с емкостью среза, остается выделенной, поскольку базовый массив, к которому срез имеет доступ, остается неизменным.
Это означает, что элементы, которые находятся за пределами новой длины, но в пределах емкости среза, технически все еще занимают память и могут быть доступны при расширении среза до его первоначальной емкости.
Таким образом, GC очистит память старого массива (если на него не будут указывать другие срезы) только после реалокации памяти и переноса значений в новый срез.
BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/323