Что такое SBO (Small Buffer Optimization)

«Что такое SBO (Small Buffer Optimization)» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SBO — это оптимизация, позволяющая избежать аллокации в куче для небольших объектов, храня их непосредственно внутри структуры. В Go это часто реализуется через встраивание массива фиксированного размера.

Пример с bytes.Buffer:

type Buffer struct {
    buf      []byte
    smallBuf [64]byte // SBO для небольших данных
}

func NewBuffer() *Buffer {
    b := &Buffer{}
    b.buf = b.smallBuf[:0] // используем стек, а не кучу
    return b
}

Преимущества:

  • Уменьшает нагрузку на GC
  • Ускоряет работу (меньше аллокаций)
  • Уменьшает фрагментацию памяти

Когда полезно:

  • Для часто создаваемых/удаляемых объектов
  • При работе с небольшими данными (<1KB)
  • В высоконагруженных сервисах