2016-09-20 7 views
0

Protobufアリーナの割り当てを評価して、Protobuf以外の関連クラスで使用するようにしています。単にメモリプールからオブジェクトを簡単に割り当てる/解除するツールとして。Protobuf:アリーナの最大メモリサイズ

私はそのAPI(https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.arena#Arena)にアリーナが使用する最大メモリを指定していません。私はメモリ使用量を制限し、アリーナを使用しているプログラムが予想よりも多くのメモリを消費するのではなく死ぬことを許可したい。

チェックする価値のあるメモリプール管理用の他のC++ライブラリはありますか? Protobufアリーナはとても使いやすいので、私はそれを使い始めました。

答えて

0

メモリの使用量を制限する機能はありませんが、ArenaOptionsに正しいフックを設定することで同じ結果が得られるはずです。特にon_arena_initフックとon_arena_allocationフックを設定することをお勧めします。 on_arena_initでは、状態を格納するためのオブジェクト(これまでに割り当てられたバイト数のカウンター)を作成し、それをvoid*として返すことができます。その後、アリーナがメモリをさらに割り当てる必要があるたびに、on_arena_allocationフックを呼び出し、cookie引数としてvoid*を渡すので、サイズカウンターを更新して、指定されたメモリキャップ以下であることを確認することができます。これは、アリーナがアプリケーションコードに渡すメモリのブロックではなく、システムアロケータからアリーナによってフェッチされたメモリのブロックを追跡することに注意してください。 on_arena_resetフックとon_arena_destructionフックを設定する必要があります。前者はカウンタをゼロにリセットし、後者はメモリリークを防ぐためにクッキーを削除します。

関連する問題