Чем отличаются длина и ёмкость bytes.Buffer

Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.

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

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

Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.

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

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

Условие

В Go создано buf := bytes.NewBuffer(make([]byte, 0, 1024)). Сколько данных в буфере и какова его начальная ёмкость? Можно ли назвать точный общий расход памяти?

Ответ

Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.

Если передать make([]byte, 1024), буфер уже будет содержать 1024 нулевых байта. Для резервирования без данных нужен срез нулевой длины или подходящее увеличение ёмкости. Не путайте размер полезного содержимого, доступную capacity и фактические аллокации, зависящие от реализации.

Источник: pkg.go.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее