簡體   English   中英

釋放 boost::singleton_pool 中的所有對象

[英]Free all objects in boost::singleton_pool

有沒有辦法一次釋放boost::singleton_pool中的所有對象?

我看到我可以訪問這些方法:

static void free(void *const);
static void ordered_free(void *const);
static void free(void *const, const size_type);
static void ordered_free(void *const, const size_type);

我想我可以使用它們通過手動迭代來釋放所有對象。 但是,有沒有辦法說“釋放所有對象”,以便池再次完全免費?

基本上我想要像purge_memory()這樣的東西,但它不會將內存釋放回系統,而是將它分配在池中。

這樣做的原因是我在池中構建了一個大對象(~2GB),我想很快擺脫它並開始構建一個新對象。 調用purge_memory()目前大約需要 2 秒,並且還會向系統釋放內存(在診斷或任務管理器中,您可以看到進程內存正在減少)。 我的希望是,通過簡單地釋放池中的東西而不實際釋放,我可以很快地炸掉第一個對象並開始構建下一個。

假設您在 singleton_pool 中分配了 1000 個對象,總共 2 GB。 如果有一個“free_all()”函數(沒有),你如何確保你沒有指向池中包含的數據的指針? 您需要遍歷所有此類指針以重置它們。 當您這樣做時,您不妨在每個上調用singleton_pool::free(ptr)

基本上,您要求的 API 不存在,並且可能不應該存在。 如果您想要最靈活(在我看來也是最有用的)API,請使用常規的 boost::pool,而不是頂部通常會阻礙優化的更高級的層。 然而,它仍然沒有“free_all()”函數,因為這又是一個錯誤農場。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM