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