Mediumstring

Чем std::string эффективен благодаря SSO?

1Постановка

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

2Решение

SSO (Small String Optimization) — встраивание короткой строки прямо в объект std::string, без heap-аллокации. Большинство реализаций хранят 15-23 байта inline.

std::string s = "hi";   // короткая — внутри объекта, без аллокации
std::string long_str(1000, 'x');  // растёт → heap-аллокация, «long» layout

sizeof(std::string);   // обычно 32 байта даже для пустой (SSO buffer + size + capacity)
  • Поэтому std::string s = "hi" не медленнее const char*;
  • При росте сверх SSO buffer происходит heap-аллокация;
  • Критично для производительности: множество коротких строк (имена, ключи, токены) не создают накладных расходов;
  • std::string предпочтительнее const char* в большинстве случаев, кроме C API.

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

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

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