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 подскажет развёрнутый ответ в реальном времени.