gpt4 book ai didi

c++ - boost::asio 自定义处理程序分配

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:24 26 4
gpt4 key购买 nike

我刚刚试图理解 boost::asio 处理程序分配示例 ( http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/example/allocation/server.cpp )。

我知道这是一个出于教育目的而过于简化的示例,但有些事情我无法理解:是否存在类 handler_allocator 使用堆 (in_use_ == true) 的任何情况,因为我看不到它。

每个 session 都有自己的分配器,每次都是这样:读取然后写入,但直到写入完成后才能读取。您还可以阅读文档:

The implementation guarantees that the deallocation will occur before the associated handler is invoked, which means the memory is ready to be reused for any new asynchronous operations started by the handler.

我的问题是:您能告诉我一个发生堆分配(在此示例中)的示例吗?

额外:有人现在有更完整的处理程序自定义分配示例吗?

最佳答案

简而言之,Boost.Asio 不保证 asio_handler_allocate()只会为单个异步操作调用一次。因此,在示例中,如果 Boost.Asio 决定它需要额外的存储空间,handler_allocator 将通过运算符 new() 从空闲存储空间进行分配。 Asynchronous Operations文档状态:

If the implementation needs to allocate storage for an asynchronous operation, the implementation will perform asio_handler_allocate(size, &h), [...]. Multiple storage blocks may be allocated for a single asynchronous operation.

实现用于确定它需要分配存储的标准是未指定的。可以在 Handler 中找到对 asio_handler_*() 函数的额外要求文档。

对于以前版本的 Boost.Asio,该示例可能在每个异步操作中执行了多次分配。简要浏览 revision history表示已努力减少处理程序拷贝的数量。

关于c++ - boost::asio 自定义处理程序分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com