【发布时间】:2011-10-27 14:19:42
【问题描述】:
我在我的应用程序中使用池来加快某些类型资源的分配:
例如
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 超过一秒,则释放一个资源。
对于可以使用哪些策略来最大程度地减少内存使用量,同时仍然保持池资源的大部分额外性能,是否有人有任何建议。
【问题讨论】:
标签: c++ memory-management garbage-collection pool