【发布时间】:2011-01-27 22:56:36
【问题描述】:
我已经开始使用 boost 池作为在 boost/pool/singleton_pool.hpp 中定义的单例,因为我需要重复分配许多相同大小的结构。与我之前使用 malloc 一样,性能提升非常显着。
我分配的对象由生产者线程放入列表中,消费者线程将这些对象从另一端取出并释放对象。但是当我释放对象时,任务管理器中进程的内存使用量永远不会减少。我猜这是因为池库预先分配了一定数量的内存?
此外,当生产者的数据速率增加时,总内存使用量似乎会以块的形式增加 ~ 10k,但即使在为池中的对象调用 free 之后也不会减少。
我想定期做一些内务管理以释放内存块以减少进程的整体内存使用量。这可能吗?我不能使用 purge_memory ,因为这意味着我必须在生产者和消费者之间同步清除。顺便说一句,purge_memory 是否会释放块,即减少任务管理器中的内存使用量?
我正在 MS windows 中编程。
谢谢 尼拉德里
PS - 我尝试使用 release_memory 通过使池排序 (ordered_malloc) 但它总是返回 false。
更新:
尚未尝试 purge_memory,因为池在两个线程之间共享。但是发现 release_memory 只适用于有序池,并且释放内存很慢,因为它只释放没有分配的内存块。
我确信清除会更快。
【问题讨论】:
-
如果它很慢是因为它没有释放使用过的内存,对我来说这是一个特性,不是问题:) 你可以向你的线程发送一个命令来暂停/停止处理并禁止使用内存,在调用 purge 之前?您尝试解决的具体用例是什么?