-3

独自の文字列クラスを実装する必要があります。

基礎となるデータ構造として使用することを考えてvector<char>いますが、それが適切な設計であるかどうかはわかりません。

目的は、すべての一般的な文字列操作をサポートし、大量の小さな文字列を非常に高速にすることです。

文字列プールが進むべき道だと思いますが、基礎となるデータ構造を決定する必要があります。そして、私は std::string を使いたくありません

他の提案はありますか?

4

3 に答える 3

2

まさにこの状況にありました。

つまり、コードのパフォーマンスを測定std::stringし、プラットフォームでの実装のボトルネックを特定しました。もちろん、その正確なボトルネックがわかれば、新しいクラスでそのボトルネックを解決できます。同じ分析で、必要のない文字列メソッドが示されたので、そうしてもよかったのです。

何を必要としなかったか、何を変更したかについては説明しません。結局のところ、質問は私に関するものではありません。プログラムが最も多く行うことと行わないことをプロファイリングする必要があります

于 2013-08-02T14:50:10.220 に答える
0

別の提案は、各 String オブジェクトにメンバー変数として固定サイズの char バッファーが含まれる String クラスを作成することです (例: char fixedBuffer[32])。これにより、一般的な短い文字列の場合、クラスはメモリを実行する必要がなくなります。割り当て、割り当て解除、プーリングなど。(そのコストは、String クラスの sizeof(String) が大きくなる可能性があり、String が固定サイズの char 配列に収まらない場合、それらの余分なバイトが無駄になることです...しかし、小さな文字列はあなたの特定のユースケースはここにあります)。

FWIW 私はその手法を使用する String クラスを作成しましたが、「小さな文字列」の概念は 8 文字以下 (NUL ターミネータ バイトを含む) を含む任意の文字列です。そうすれば、より長い文字列に使用される従来の (char *) ポインターと共に、char バッファーを共用体に保持することができたので、char 配列メンバー変数の存在によって sizeof(String) が増加することはありませんでした。ただし、オブジェクト サイズを大きくすることを犠牲にして、より大きなインライン char バッファーを使用するようにコンパイル時に設定できます。私の実装はここここにあります。これは、私が作成したBSD ライセンスのライブラリの一部です。

于 2013-08-02T15:21:03.780 に答える