C++ 异步写入提升。它会复制缓冲区吗?

C++ 异步写入提升。它会复制缓冲区吗?,c++,networking,boost,buffer,boost-asio,C++,Networking,Boost,Buffer,Boost Asio,pck是在堆上分配的,如果我删除它,存储是否也会变得无效,或者异步写入是否会将缓冲区复制到其内部结构中,并且可以在堆栈上自由删除/分配 谢谢。异步写入功能不会复制缓冲区。它将内部对象传递给更深层的库函数。const\u buffer对象包含指向实际缓冲区的内部指针,因此不会执行深度复制。您需要确保pck->storage在调用异步处理程序之前保持有效 请注意,这当然是最好的。每次复制缓冲区都会造成很大的性能损失。请注意缓冲区,或者至少会将部分缓冲区复制到内核的套接字缓冲区中。通常这没什么大不了的

pck是在堆上分配的,如果我删除它,存储是否也会变得无效,或者异步写入是否会将缓冲区复制到其内部结构中,并且可以在堆栈上自由删除/分配


谢谢。

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


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

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

读源代码?!?!如果我只写一个int呢?深度复制可以保存运算符new()
async_write(*this, BoostAsio::buffer(pck->_storage), boost::bind(&tcp_socket::handle_wrote, this, pck, BoostAsio::placeholders::error));