SSO (Small String Optimization)
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.