私はProtocolBuffersとOpensSSLを使用して生成し、HMACを使用してから、CBCが2つのフィールドを暗号化して、セッションCookie(同様のKerberosトークン)を難読化します。
ProtocolBuffersのAPIはstd::stringsと通信し、バッファキャッシングメカニズムを備えています。同じスレッドでの連続した呼び出しに対して、スレッドローカルメモリに配置することにより、キャッシュメカニズムを利用します。さらに、OpenSSLHMACとEVPCTXも同じスレッドローカルメモリ構造に配置されます(スレッドローカルメモリを使用する理由と、単一スレッドでも可能になる大幅な高速化の詳細については、この質問を参照してください)。
これらのCookie文字列の生成と逆シリアル化「myalgorithms」は中間void *
のsとstd::string
sを使用し、Protocol Buffersには内部メモリ保持メカニズムがあるため、「myalgorithms」にこれらの特性が必要です。
では、一般的なスクラッチメモリを実装するにはどうすればよいですか?std :: stringオブジェクトのrdbuf(streambuf --strinbuf ??)についてはよくわかりません。おそらく、「私のアルゴリズム」の実行中にこれまでに遭遇した最小の一般的なサイズにそれを拡大する必要があるでしょう。考え?
私の質問は次のようになります。「文字列の内部バッファは再利用可能ですか。再利用できる場合は、どのように使用しますか?」
編集(新しい質問):
Vladの投稿後、std::stringとvoid*cスタイルのスクラッチバッファが必要であることが反映されているようです。私の質問は次のようになります:人気のあるstlの文字列実装は、メモリを必要としないときにメモリを保持しますか?(私のニーズはおそらく128バイトから10KBの間にとどまるでしょう)。