0).
Затем аппендим в него 1млн элементов в цикле.
При аппендах, при выходе за capacity, нижележайший массив будет пересоздаваться на массив бОльшей размерности.
Допустим мы достигли той ситуации когда нижележайший массив станет размерностью в 2млн. элементов.
Теперь мы делаем реслайсинг в цикле, отбрасывая самый первый элемент. Вот так: a = a[1:]
Вопрос, будет ли в таком случае, происходить обратный процесс уменьшения размерности массива?
Или размер массива так и останется 2млн, а при реслайсах просто будет сдвигаться указатель?
будет сдвигаться, а потом GC подчистит
https://blog.golang.org/slices-intro
и увеличение его при append не такое простое как кажется https://golang.org/src/runtime/slice.go#L115
там не указано, что произойдет при обратном процессе, там только указано про удвоение capacity, при добавлениях, а обратный процесс не описан
В разделе possible gotcha написано As mentioned earlier, re-slicing a slice doesn't make a copy of the underlying array. The full array will be kept in memory until it is no longer referenced. Occasionally this can cause the program to hold all the data in memory when only a small piece of it is needed.
Обсуждают сегодня