Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.
Чем отличаются длина и ёмкость bytes.Buffer
Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Go создано buf := bytes.NewBuffer(make([]byte, 0, 1024)). Сколько данных в буфере и какова его начальная ёмкость? Можно ли назвать точный общий расход памяти?
Ответ
Длина данных равна 0, ёмкость — 1024 байта. Это не означает, что общий расход памяти процесса на объект ровно 1024 байта: есть структура и расходы выделения.
Если передать make([]byte, 1024), буфер уже будет содержать 1024 нулевых байта. Для резервирования без данных нужен срез нулевой длины или подходящее увеличение ёмкости. Не путайте размер полезного содержимого, доступную capacity и фактические аллокации, зависящие от реализации.
Источник: pkg.go.dev.