Weiß jemand, ob es eine mit STL-Schnittstellen kompatible String-Klasse gibt, die Speicher für kleine Strings im Stack (bis zu einem bestimmten Schwellenwert) und den Heap für größere Strings zuweist?
Ich suche ein Programm zu optimieren, und ich verwende eine Menge kleiner lokaler Strings, die leicht auf den Stack passen, anstatt auf dem Heap zugewiesen zu werden.
Sie können einen benutzerdefinierten Zuordner für std::basic_string
angeben (dies ist das dritte Vorlagenargument). Diese Antwort erklärt, wie man das benutzt und Links zu einer Implementierung eines Stack-Allocators, der benutzt werden kann.
Die Implementierung von vstring (__versa_string) von gcc kann die kleine String-Optimierung durchführen und hat eine Standard-String-Schnittstelle. Wenn Sie gcc verwenden, ist es einfach genug, ext / vstring einzuschließen. Andernfalls können Sie es möglicherweise an Ihren Compiler / enviroent anpassen.
Das ist eine antike Frage, aber ich denke, dass dies besser ist als jede der aktuellen Antworten.
Grundsätzlich ist es das, was du willst. BTW tcmalloc erhöht perf in meinem (schlecht entworfen: D) String Alloc intensive Programm 10%. Auch sollten Sie Profil beweisen, dass Alloks Ihr Perf-Problem sind.
__ versa_string Die SSO-Version kann nicht mehr als 15 Byte auf dem Stack speichern, und wenn dies der Fall ist, reserviert sie 16 Byte unabhängig von der String-Größe ( Ссылка ).
Ссылка kann einen Stack-Buffer wiederverwenden, aber ich hatte Probleme mit dem Link unter Debian Wheezy 64bit.
Ссылка kann einen Stack-Puffer wiederverwenden.
Ich habe eine Header-Only-String-Klasse geschrieben, die nur vier Bytes verwendet und einen Stack-Puffer wiederverwenden kann:
Ссылка
Es hat eine begrenzte STL-Kompatibilität: basic_streambuf zur Verwendung mit std :: ostream implementiert.
Tags und Links string c++ stl memory-management wstring