我正在使用协议缓冲区和OpensSSL生成 HMAC,然后 CBC 加密这两个字段以混淆会话 cookie——类似的 Kerberos 令牌。
Protocol Buffers 的 API 与 std::strings 通信,并具有缓冲区缓存机制;我利用缓存机制,将同一线程中的连续调用放在线程本地内存中;此外,OpenSSL HMAC 和 EVP CTX 也被放置在同一个线程本地内存结构中(请参阅这个问题,了解为什么我使用线程本地内存以及即使使用单个线程也能实现大量加速)。
这些 cookie 字符串的生成和反序列化“我的算法”使用中介void *
s 和std::string
s,并且由于 Protocol Buffers 具有内部内存保留机制,我希望这些特征用于“我的算法”。
那么如何实现一个通用的暂存器呢?我对 std::string 对象的 rdbuf(streambuf - strinbuf ??) 了解不多。我大概需要将它增长到执行“我的算法”期间遇到的最低常见大小。想法?
我想我的问题是:“字符串的内部缓冲区是否可重用,如果是,如何?”
编辑(新问题):
在 Vlad 的帖子之后,我似乎确实需要一个 std::string 以及一个 void * c 样式的暂存缓冲区。那么我的问题是:流行的 stl 的字符串实现在不需要时会保留内存吗?(我的需求可能会保持在 128 字节到 10 KB 之间)。