gpt4 book ai didi

c++ - Protocol Buffer : Maximum memory size for the Arena

转载 作者:行者123 更新时间:2023-11-30 05:22:32 33 4
gpt4 key购买 nike

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

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

是否还有其他值得检查的用于内存池管理的 C++ 库? Protobuf arena 非常易于使用,这就是我开始使用它的原因。

最佳答案

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

关于c++ - Protocol Buffer : Maximum memory size for the Arena,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592450/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com