Lessico IT › Programmazione › SSO (Small String Optimization)

SSO (Small String Optimization)

Programmazione Svenska → Aggiornato: 2026-10-02

Memorizzare le stringhe brevi direttamente dentro l'oggetto stringa invece di allocarle sull'heap. Il motivo per cui sizeof(std::string) vale 32 byte e non 8.

Poiché nei programmi reali la maggior parte delle stringhe è breve — chiavi, identificatori, etichette, estensioni di file — un'allocazione per ogni stringa sarebbe un enorme spreco. Le implementazioni collocano quindi il contenuto nei byte dell'oggetto stesso fino a una certa lunghezza, quindici caratteri in libstdc++ e ventidue in libc++, e passano all'heap solo oltre questa soglia. Il vantaggio è sia un minor numero di allocazioni sia la presenza dei dati nella stessa cache line dell'oggetto. Tre conseguenze meritano attenzione: l'oggetto è più grande di quanto si pensi, spostare una stringa breve ne copia di fatto il contenuto invece di sottrarre un puntatore e dunque non è gratuito, e il ramo tra caso breve e lungo compare nei profili del codice che usa molte stringhe. Nulla di tutto ciò è imposto dallo standard.

← Torna al lessico