什么是MsgPack的“zone”?

7

我在MsgPack C headers中看到了“zone”的参考文献,但找不到有关它是什么或其用途的文档。它是什么?此外,C API的函数文档在哪里?


我建议首先阅读它的官方文档 - user529758
你是在指引我去msgpack.org吗?如果是的话,我也没有找到任何有用的区域描述。谷歌可以找到一些参考资料,但并不是很有帮助:https://www.google.com/search?q=zone+site%3Amsgpack.org&aq=f&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8 - brooks94
请访问链接,那是GitHub项目的自述文件。 - user529758
2个回答

4
msgpack_zone是在解包时用于内存管理和生命周期的内部结构。如果您使用标准的高级接口进行解包或替代流式处理版本,则永远不必与其交互。
据我所知,没有详细的文档:相反,您应该参考测试套件,该测试套件提供方便的代码示例以实现常见任务,例如查看pack_unpack_c.ccstreaming_c.cc

0

从我所了解的情况来看,它是一种仅限移动类型,用于存储msgpack::object的实际数据。它很可能是一种实现细节,但有时会泄漏到用户代码中。例如,每当您想在lambda中捕获msgpack::object时,您必须同时捕获msgpack::zone对象。有时您无法使用移动捕获(例如,在某些情况下,asio处理程序只能使用可复制处理程序,或者您的编译器不支持该功能)。为了解决这个问题,您可以:

msgpack::unpacked r;
while (pac_.next(&r)) {
   auto msg = result.get();
   io_->post([this, msg, z = std::shared_ptr<msgpack::zone>(r.zone().release())]() {
                // msg is valid here            
             }));
}

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