170 похожих чатов

Всем привет. Такой вопрос. Создаем slice нулевого размера и capacity через make([]int,

0).

Затем аппендим в него 1млн элементов в цикле.

При аппендах, при выходе за capacity, нижележайший массив будет пересоздаваться на массив бОльшей размерности.
Допустим мы достигли той ситуации когда нижележайший массив станет размерностью в 2млн. элементов.

Теперь мы делаем реслайсинг в цикле, отбрасывая самый первый элемент. Вот так: a = a[1:]

Вопрос, будет ли в таком случае, происходить обратный процесс уменьшения размерности массива?
Или размер массива так и останется 2млн, а при реслайсах просто будет сдвигаться указатель?

5 ответов

14 просмотров

будет сдвигаться, а потом GC подчистит

https://blog.golang.org/slices-intro

и увеличение его при append не такое простое как кажется https://golang.org/src/runtime/slice.go#L115

Николай-Оськин Автор вопроса
lrrr_lrrr
https://blog.golang.org/slices-intro

там не указано, что произойдет при обратном процессе, там только указано про удвоение 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.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта