我的應用程序我正在使用游泳池來加速某些類型資源的分配:游泳池垃圾收集策略
例如,
tbb::concurrent_unordered_map<size_t, tbb::concurrent_bounded_queue<resource>> pools;
std::shared_ptr<resource> create_resource(size_t size)
{
auto pool = pools[size];
std::shared_ptr<resource> resource;
if(!pool->try_pop(resource))
resource.reset(new resource(size));
return std::shared_ptr<host_buffer>(resource.get(), [=](resource*)
{
pool->push(resource);
});
}
這很好,但我有一些高內存使用問題。
如果在我的應用程序中資源的使用發生變化,我有很多不需要的預分配資源,只佔用內存空間。
我需要某種策略,它可以讓我以某種方式檢測何時不希望再次分配某個池化資源並動態調整池(例如,如果池的大小不超過2秒超過一秒,則會釋放一個資源。
有沒有人有任何建議關於什麼樣的策略可以用來最大限度地減少內存使用量,同時仍然保持大部分池資源的額外性能。
這不起作用,除非他可以重新排列內部數據,而這些內部數據可能無法在池中使用。 –
是的,這是一個限制。但是你可以使用指針使你的資源重新排列。 –
另外,我剛剛意識到這一點適用於內部隊列。我的錯。 –