zone

zone是在打包和解包期间管理内存分配和释放的对象。将对象的序列化分配给特定zone,意味着这些内存分配和释放可以被视为一个组。

这允许您实现高级内存管理策略,例如将每个序列化对象分配到其自己的内存池,或允许某些类型的序列化对象共享内存池。

当前存在两种zone实现,一种用于 Cpp03,一种用于 Cpp11。

zone可以通过其 allocate_aligned() 和 allocate_non_aligned() 成员函数处理对齐和非对齐内存的分配。此外,它还提供静态 new() 和 delete() 运算符,以及用于处理任何合理数量参数的对象的 allocate() 函数。

此外,一个zone可以存储一组“finalizer”仿函数。您可以通过 push() 成员函数提供这些finalizer,该函数需要函数的参数以及要提供给该函数的参数。该zone既存储指向函数的指针,也存储应作为参数提供给该函数的数据。当zibe被销毁时,会依次调用每个finalizer。这允许您在拆卸时实现任意内存和其他资源的释放。

在内部,当前的 msgpack C++ 实现使用 ::malloc()、::realloc() 和 ::free()。但是,您可能希望对这些区域实现进行子类化或以其他方式重写,以便依赖您喜欢的内存管理系统。

Q.E.D.