MediumperformanceSTL

Что такое small buffer optimization (SBO)?

1Постановка

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

2Решение

SBO (или SSO для string) — встраивание небольшого буфера прямо в объект контейнера, чтобы избежать heap-аллокации для маленьких размеров. std::string почти везде хранит 15–23 байта inline — короткие строки не аллоцируются.

std::string s = "hi";        // SSO: внутри объекта, без аллокации
std::string big(1000, 'x');  // heap-аллокация

// std::function тоже имеет SBO-буфер
std::function<int(int)> f = [](int x) { return x * 2; };  // inline, без alloc

Преимущества: меньше аллокаций → быстрее, лучше локальность, нет фрагментации. Минус: sizeof больше (sizeof(string) обычно 32 байта даже для пустой). Поэтому часто string быстрее vector<char> на маленьких размерах.

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

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

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