Mediumsbooptimization

Что такое small buffer optimization (SBO) и где он используется?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

SBO — хранение небольшого количества данных прямо внутри объекта, без динамической аллокации. Для маленьких значений нет malloc/free — быстрее и лучше локальность кэша.

std::string s1 = "hi";          // хранится внутри объекта (SSO), нет heap
std::string s2 = "очень длинная строка...";  // выделяется на heap

// std::function хранит small callable внутри (16-32 байта),
// для больших функторов аллоцирует
std::function<void()> f = []{ /* small */ };  // inline

Где используется: std::string (SSO до 15-22 байт в зависимости от реализации), std::function, boost::small_vector<T, N> (встроенный буфер на N элементов).

Недостатки: объект больше (всегда резервирует SBO size), сложнее реализация. Критичен для производительности часто используемых типов.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.