提高POOL使用率-单身人士

Nil*_*ose 5 c++ boost

我已经开始使用Boost池作为boost / pool / singleton_pool.hpp中定义的单例,因为我需要重复分配很多相同大小的结构。正如我之前使用malloc一样,性能得到了惊人的提高。

我分配的对象由生产者线程放入列表中,而使用者线程将这些对象移到另一端并释放对象。但是当我释放对象时,任务管理器中进程的内存使用量永远不会减少。我猜这是因为池库预先分配了一定数量的内存?

同样,当生产者的数据速率增加时,总内存使用量似乎以块为单位增加了约10k,但即使在调用池中的对象空闲后也从未减少。

我想定期做一些整理工作以释放内存块,以减少进程的整体内存使用量。这可能吗?我不能使用purge_memory,因为这将意味着我必须在农产品和消费者之间同步净化。顺便说一句,purge_memory是否释放了块,即减少了任务管理器中的内存使用量?

我在MS Windows中编程。

谢谢Niladri

PS-我尝试通过将池排序(ordered_malloc)来使用release_memory,但它始终返回false。

更新:

尚未尝试使用purge_memory,因为该池在两个线程之间共享。但是已经发现release_memory仅适用于有序池,并且释放内存的速度很慢,因为它仅释放没有分配的内存块。

我敢肯定,清除会更快。

neu*_*uro 3

根据文档

bool t.release_memory()

必须订购。释放没有任何分配块的每个内存块。如果至少有一个内存块被释放,则返回 true。

bool t.purge_memory()

释放每个内存块。该函数使 t 的分配函数先前返回的任何指针无效。如果至少有一个内存块被释放,则返回 true。

因此,要释放内存,您需要使用purge_memory(). 只有当你从池中获得的每个指针都不再被使用时,你才能做到这一点!

如果release_memory返回true,看来你的内存还在使用......

我的2c