MiddleТеорияИногдаЕщё не отвечали
Какие ловушки есть у срезов Go из-за общего backing array?
Срезы делят backing array, отсюда три ловушки. Запись через один срез меняет другие там, где их диапазоны пересекаются. append может затронуть, а может не затронуть оригинал — в зависимости от запаса ёмкости. А маленький под-срез держит весь большой массив живым, мешая GC. Смягчают это copy или s[low:high:max].
- ✗Считать под-срез независимой копией — он алиасит backing array родителя
- ✗Считать, что
appendвсегда реаллоцирует — в пределах запасаcapон перезаписывает общие элементы - ✗Упускать удержание памяти — крошечный под-срез может удерживать огромный массив
- →Как трёхиндексный срез
s[low:high:max]предотвращает алиасинг при следующемappend? - →Почему маленький под-срез большого массива может вызвать утечку памяти и как это исправить?
</content>