Léxico de TI › Programação › SSO (Small String Optimization)

SSO (Small String Optimization)

Programação Svenska → Atualizado: 2026-09-30

Guardar strings curtas dentro do próprio objeto string, em vez de alocá-las no heap. O motivo de sizeof(std::string) ser 32 bytes e não 8.

Como a maioria das strings em programas reais é curta (chaves, identificadores, rótulos, extensões de arquivo), uma alocação por string seria um desperdício enorme. Por isso as implementações colocam o conteúdo nos bytes do próprio objeto até certo tamanho, quinze caracteres na libstdc++ e vinte e dois na libc++, e só usam o heap acima disso. O ganho é ter menos alocações e os dados na mesma linha de cache do objeto. Três consequências valem ser conhecidas: o objeto é maior do que você imagina, mover uma string curta na verdade copia o conteúdo em vez de roubar um ponteiro e, portanto, não é de graça, e o desvio entre curta e longa aparece em profilers de código intensivo em strings. Nada disso é exigido pelo padrão.

← Voltar ao léxico