async_write - повысить.Копирует ли он буфер? - PullRequest
2 голосов
/ 11 декабря 2010
async_write(*this, BoostAsio::buffer(pck->_storage), boost::bind(&tcp_socket::handle_wrote, this, pck, BoostAsio::placeholders::error));

pck выделяется в куче, если я ее удалу, _storage также станет недействительным или async_write скопирует буфер в его внутренние структуры и его можно будет свободно удалять / размещать в стеке?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Функция async_write не копирует буфер. Он передает внутренний объект const_buffer в более глубокие библиотечные функции. Объект const_buffer содержит внутренний указатель на фактический буфер, поэтому глубокое копирование не выполняется. Необходимо убедиться, что pck->storage остается действительным до тех пор, пока не будет вызван асинхронный обработчик.

Обратите внимание, что это, безусловно, к лучшему. Копирование буфера каждый раз будет очень большой потерей производительности.

0 голосов
/ 11 декабря 2010

Обратите внимание, что буфер или хотя бы его часть будут скопированы в буфер сокета ядра.Обычно это не имеет большого значения.Однако вы можете установить буфер отправки на ноль, чтобы использовать буфер приложения во время операции.Конечно, вы не должны делать это без понимания других последствий отключения буфера отправки.

...