La mia applicazione sta avendo problemi di memoria, inclusa la copia di molte stringhe, usando le stesse stringhe delle chiavi in molti hashtables, ecc. Sto cercando una class base per le mie stringhe che lo renda molto efficiente.
Sto sperando in:
La mia piattaforma è g ++ su Linux (ma è improbabile che importi).
Conosci una tale biblioteca?
Se la maggior parte delle stringhe è immutabile, la libreria Boost Flyweight potrebbe soddisfare le tue esigenze.
Farà internare la stringa, ma non credo che faccia la copia su scrittura.
copy-on-write (penso che questo sia gratuito in quasi tutte le implementazioni di std :: string)
Non credo che questo sia più il caso. Copy-on-write causa problemi quando si modificano le stringhe tramite iteratori: in particolare, ciò causa risultati indesiderati (ovvero nessuna copia e entrambe le stringhe vengono modificate) o un sovraccarico non necessario (poiché gli iteratori non possono essere implementati puramente in termini di puntatori : devono eseguire controlli aggiuntivi quando vengono sottoposti a dereferenziazione).
Inoltre, tutti i moderni compilatori C ++ eseguono NRVO ed eliminano la necessità di copiare le stringhe del valore di ritorno nella maggior parte dei casi. Poiché questo è stato uno dei casi più comuni per la semantica copy-on-write, è stato rimosso a causa degli aspetti negativi di cui sopra.
L’ implementazione di ‘ Basic Based basic_string ‘ di Andrei Alexandrescu può aiutare.
Dai un’occhiata a The Better String Library del leggendario Paul Hsieh