Protobuf:竞技场的最大内存大小

时间:2016-09-20 11:06:08

标签: c++ memory protocol-buffers allocation pool

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

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

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

1 个答案:

答案 0 :(得分:0)

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