Как в Go происходит выделение новой памяти при расширении слайса?

В Go слайс — это структура, которая содержит указатель на массив, длину и емкость (capacity).

Короткий ответ

Что ответить на собеседовании

В Go слайс — это структура, которая содержит указатель на массив, длину и емкость (capacity). Когда вы увеличиваете capacity слайса (например, при добавлении элементов с помощью append), если текущий массив не может вместить новые данные, создаётся новый массив большего размера.

Подробный разбор

Ответ с пояснениями

В Go слайс — это структура, которая содержит указатель на массив, длину и емкость (capacity). Когда вы увеличиваете capacity слайса (например, при добавлении элементов с помощью append), если текущий массив не может вместить новые данные, создаётся новый массив большего размера.

Новый слайс будет указывать на этот новый массив, который выделяется в другой области памяти (обычно в куче). Старый массив остаётся в памяти до тех пор, пока на него есть ссылки, после чего сборщик мусора его очистит.

Пример:

s := make([]int, 0, 2) // capacity = 2
s = append(s, 1, 2)     // заполнен массив
s = append(s, 3)        // capacity увеличится, выделится новый массив

Таким образом, при увеличении capacity слайса создаётся новый массив в памяти, и слайс начинает ссылаться на него.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку