Как мне указать буфер тела, который не копируется компилятором?

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

ТИА.

0 ответов

Другие вопросы по тегам