Как мне указать буфер тела, который не копируется компилятором?
У меня есть следующий код, который объявляет тело 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] (поскольку это модифицируемый указатель, а текущий стандарт требует, чтобы распределение данных строки было непрерывным). Я предпочел бы избежать этого, плюс это не решает другую копию.
ТИА.