Я использую протоколы буферов и OpensSSL для генерации, HMAC, а затем CBC шифруют два поля, чтобы скрыть файлы cookie сеанса - аналогично токенам Kerberos.
API протокольных буферов взаимодействует с std :: strings и имеет механизм кэширования буфера; Я использую механизм кэширования для последовательных вызовов одного и того же потока, помещая его в локальную память потока; кроме того, OpenSSL HMAC и EVP CTX также помещаются в одну и ту же структуру локальной памяти потока (см. этот вопрос для некоторых подробностей о том, почему я использую локальную память потока и огромное количество ускорения, которое она дает даже с одним потоком).
Для генерации и десериализации, «моих алгоритмов», этих строк cookie используются промежуточные void *
s и std::string
s, и, поскольку Protocol Buffers имеет внутренний механизм сохранения памяти, мне нужны эти характеристики для «моих алгоритмов».
Итак, как мне реализовать обычную рабочую память? Я мало что знаю о rdbuf (streambuf - strinbuf ??) объекта std :: string. Предположительно, мне нужно было бы увеличить его до наименьшего общего размера, который когда-либо встречался во время выполнения «моих алгоритмов». Мысли ?
Думаю, у меня будет следующий вопрос: «Можно ли многократно использовать внутренний буфер строки, и если да, то как?»
Изменить (новый вопрос):
После сообщения Влада мне кажется, что мне действительно нужен std :: string, а также буфер нуля в стиле void * c. Тогда у меня будет вопрос: сохраняют ли популярные строковые реализации stl память, когда она им не нужна? (мои потребности, вероятно, останутся от 128 байт до 10 КБ).