【问题标题】:boost asio buffer lazy allocation提升 asio 缓冲区延迟分配
【发布时间】:2013-01-08 09:41:25
【问题描述】:

异步操作。

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

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

是否可以为此调用和其他调用进行延迟分配?

【问题讨论】:

  • 为什么要说惰性分配

标签: c++ boost boost-asio


【解决方案1】:

延迟分配,或allocating when the resource is needed,可以使用boost::asio::null_buffers 来完成。 null_buffers 可用于在 Boost.Asio 中获取反应器式操作。这对于与第三方库集成、使用共享内存池等很有用。Boost.Asio documentation 提供了一些信息和以下示例代码:

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));
  }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2023-03-04
  • 2014-12-21
  • 2014-01-02
  • 2020-11-14
相关资源
最近更新 更多