У меня есть следующий код, который объявляет тело HTTP-запроса с помощью cpp-netlib:
request << ::boost::network::body(request_body);
with request_body being an std::string or char*.
Вопрос в том, как указать тело, не имеябуфер скопирован компилятором?Мы отправляем очень большие буферы, очень часто.В приведенном выше сценарии есть 2 копии данных (одна для преобразования фактического буфера char * в std :: string, потому что мы читаем данные файла в буфер char *, а другая - для копирования из request_body в запрос).Я полагаю, что вторая копия происходит потому, что использование памяти увеличивается точно в том случае, если я передаю std :: string, и вдвое больше, чем я передаю char *.
Некоторые примечания: - исходный буфер - char *,это то, во что считываются данные (довольно большие, несколько МБ, несколько потоков) - преобразование в std :: string не является моим выбором или требованием чего-либо еще, кроме приведенной выше строки кода.Я знаю, что могу передать request_body как буфер char * напрямую, но это все равно копирует данные в std :: string.- одна буферная копия может быть удалена с помощью предварительно выделенного std :: string и чтения данных в & request_body [0] (поскольку это модифицируемый указатель, а текущий стандарт требует, чтобы распределение данных строки было непрерывным).Я предпочел бы избежать этого, плюс это не решает другую копию.
TIA.