2016-09-20 64 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刪除以避免內存泄漏。