gpt4 book ai didi

c++ - 池垃圾收集策略

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:45 26 4
gpt4 key购买 nike

我是我的应用程序,我正在使用池来加速某些类型资源的分配:

例如

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,则释放一个资源。

对于可以使用什么策略来最小化内存使用同时仍然保持池化资源的大部分额外性能,有没有人有任何建议。

最佳答案

这里有一个简单的解决方案:将队列的大小定义为 2^N(N 必须至少为 2),当池大于 2^N 时,当队列小于2^(N-2),你将N减一。

这是一个非常轻量级的想法,可以在很多情况下使用。

关于c++ - 池垃圾收集策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com