我已经开始使用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仅适用于有序池,并且释放内存的速度很慢,因为它仅释放没有分配的内存块。
我敢肯定,清除会更快。
| 归档时间: |
|
| 查看次数: |
2772 次 |
| 最近记录: |