2016-09-20 58 views
0

我正在评估Protobuf Arena分配以便与非protobuf相关的类一起使用。就像一个轻松分配/释放内存池中的对象的工具。Protobuf:竞技场的最大内存大小

我还没有在其API(https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.arena#Arena)中找到一种方法来指定要使用的场所的最大内存。我想限制内存使用,并允许使用Arena的程序死亡,而不是消耗比预期更多的内存。

是否有任何其他C++库的内存池管理值得检查? Protobuf竞技场很容易使用,这就是我开始使用它的原因。

回答

0

有没有真正的内置功能来限制内存使用,但我相信你可以通过在ArenaOptions上设置正确的钩子来获得相同的结果。你会想要特别设置on_arena_initon_arena_allocation钩子。在on_arena_init中,您可以创建一个对象来存储您的状态(可能只是一个到目前为止分配的字节数的计数器),并将其作为void*返回。然后每次竞技场需要分配更多内存时,它会调用您的on_arena_allocation挂钩并将void*作为cookie参数传入,因此您可以更新大小计数器并声明它低于您指定的内存上限。请注意,这将跟踪由Arena从系统分配器获取的内存块,而不是Arena由应用程序代码发出的内存块,但它听起来像这可能是您想要的行为。您可能还需要设置on_arena_reseton_arena_destruction挂钩:前者将您的计数器重置为零,后者将您的cookie删除以避免内存泄漏。