我的应用程序我正在使用游泳池来加速某些类型资源的分配:游泳池垃圾收集策略
例如,
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秒超过一秒,则会释放一个资源。
有没有人有任何建议关于什么样的策略可以用来最大限度地减少内存使用量,同时仍然保持大部分池资源的额外性能。
这不起作用,除非他可以重新排列内部数据,而这些内部数据可能无法在池中使用。 –
是的,这是一个限制。但是你可以使用指针使你的资源重新排列。 –
另外,我刚刚意识到这一点适用于内部队列。我的错。 –