Boost Asio缓冲区的惰性分配

3

异步操作。

现在,我传递预分配的字节缓冲区,例如:

s.async_receive_from(
    boost::asio::buffer( preallocated_pointer, preallocated_size ),
    _remote_endpoint,
    boost::bind(...)
    );

是否可能对此及其他调用进行惰性分配?


2
“懒惰分配”是什么意思? - K-ballo
1个回答

9
懒惰分配,或者在需要资源时分配, 可以使用boost::asio::null_buffers来完成。 null_buffers可以用于在Boost.Asio中获得反应堆式操作。这对于与第三方库集成、使用共享内存池等非常有用。 Boost.Asio 文档提供了一些信息和以下示例代码:
ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(), read_handler);
...
void read_handler(boost::system::error_code ec)
{
  if (!ec)
  {
    std::vector<char> buf(socket.available());
    socket.read_some(buffer(buf));
  }
}

好答案 - 我自己也能用得上 :) - Caribou
这个答案非常有帮助。谢谢。 - Cengiz Kandemir
2
自Boost 1.66.0起,null_buffers已被弃用:"(已弃用: 使用套接字/描述符的wait()和async_wait()成员函数。)" - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接