スタック上の小さな文字列に (特定のしきい値まで) メモリを割り当て、大きな文字列にヒープを割り当てる STL インターフェイス互換の文字列クラスがあるかどうかは誰にもわかりませんか?
プログラムを最適化しようとしていて、ヒープに割り当てられるのではなく、スタックに簡単に収まる小さなローカル文字列の割り当てを使用しています。
スタック上の小さな文字列に (特定のしきい値まで) メモリを割り当て、大きな文字列にヒープを割り当てる STL インターフェイス互換の文字列クラスがあるかどうかは誰にもわかりませんか?
プログラムを最適化しようとしていて、ヒープに割り当てられるのではなく、スタックに簡単に収まる小さなローカル文字列の割り当てを使用しています。
これは古い質問ですが、現在の回答よりも優れていると思います。
http://llvm.org/docs/ProgrammersManual.html#dss_smallstring
基本的にそれはあなたが望むものです。ところで、tcmalloc は、私の (設計が悪い:D) 文字列割り当て集中型プログラムのパフォーマンスを 10% 向上させました。また、割り当てがパフォーマンスの問題であることを証明するためにプロファイルする必要があります。
カスタム アロケータを指定できますstd::basic_string
(これは 3 番目のテンプレート引数です)。この回答は、それを使用する方法を説明し、使用できるスタックアロケーターの実装にリンクしています。
gccのvstring(__versa_string)実装は、小さな文字列の最適化を実行でき、std文字列インターフェイスを備えています。gccを使用している場合は、ext/vstringを含めるのは簡単です。そうしないと、コンパイラ/環境に適合させることができる場合があります。
__versa_string SSO バージョンは、スタックに 15 バイトしか格納できず、格納できる場合は、文字列のサイズに関係なく 16 バイトを予約します ( http://codepad.org/2M7N9cTu )。
http://www.and.org/ustr/はスタック バッファを再利用できますが、Debian Wheezy 64 ビットでのリンクに問題がありました。
http://freecode.com/projects/str-classはスタック バッファを再利用できます。
私は、わずか 4 バイトを使用し、スタック バッファーを再利用できるヘッダーのみの文字列クラスを作成しまし
た
。 std::ostream で使用するために実装された basic_streambuf。