async_write - boost。它复制缓冲区吗?

时间:2010-12-10 22:54:57

标签: c++ networking boost buffer boost-asio

async_write(*this, BoostAsio::buffer(pck->_storage), boost::bind(&tcp_socket::handle_wrote, this, pck, BoostAsio::placeholders::error));
pck在堆上分配,如果我删除它,_storage也会变得无效,或者async_write将缓冲区复制到其内部结构中,它可以在堆栈上自由删除/分配?

谢谢。

2 个答案:

答案 0 :(得分:2)

async_write函数不会复制缓冲区。它将内部const_buffer对象传递给更深层的库函数。 const_buffer对象包含指向实际缓冲区的内部指针,因此不执行深层复制。在调用异步处理程序之前,您需要确保pck->storage保持有效。

请注意,这肯定是最好的。每次复制缓冲区都会造成很大的性能损失。

答案 1 :(得分:0)

请注意缓冲区或至少部分缓冲区将被复制到内核的套接字缓冲区中。通常这不是什么大问题。但是,您可以将发送缓冲区设置为零,以便在操作期间使用应用程序的缓冲区。当然,如果不了解禁用发送缓冲区的其他后果,则不应该这样做。