String-Klasse auf Stack für kleine Strings zuweisen?

8

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.

    
ROAR 24.03.2011, 12:23
quelle

4 Antworten

1

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.

    
Björn Pollex 24.03.2011, 12:36
quelle
1

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.

    
Logan Capaldo 24.03.2011 12:50
quelle
1

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.

    
NoSenseEtAl 17.09.2012 15:28
quelle
0

__ 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.

    
ArtemGr 24.05.2012 06:12
quelle