什么是MsgPack'区域'

时间:2012-10-16 18:37:30

标签: c msgpack

我在MsgPack C headers中看到过对'zone'的引用,但是找不到它是什么或它是什么的文档。它是什么?此外,哪里有C API的功能文档?

2 个答案:

答案 0 :(得分:4)

msgpack_zone是用于内存管理的内部结构。拆包时的生命周期。我会说如果您使用unpacking或替代streaming版本的标准高级界面,则永远不会与之互动。

据我所知,没有详细的文档:相反,您应该参考提供方便代码示例的测试套件来实现常见任务,例如:请参阅pack_unpack_c.ccstreaming_c.cc

答案 1 :(得分: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            
             }));
}