Я начал использовать пулы буста как синглтон, определенный в boost / pool / singleton_pool.hpp, так как мне нужно многократно выделять множество структур одного размера. Улучшение производительности является феноменальным, так как я использовал malloc раньше.
Объекты, которые я выделяю, помещаются в список потоком производителя, а потребительский поток снимает их с другого конца и освобождает объекты. Но когда я освобождаю объект, использование памяти процессом в диспетчере задач никогда не уменьшается. Я предполагаю, что это потому, что определенная часть памяти предварительно выделена библиотекой пула?
Также, когда скорость передачи данных производителя увеличивается, общее использование памяти, кажется, увеличивается в кусках ~ 10k, но никогда не уменьшается даже после вызова free для объектов в пуле.
Я хотел бы периодически вести домашнее хозяйство, чтобы освободить фрагменты памяти, чтобы уменьшить общее использование памяти процессом. Это возможно? Я не могу использовать purge_memory, так как это будет означать, что мне придется синхронизировать чистку между производителями и потребителями. Кстати, purge_memory освобождает блок, то есть уменьшает использование памяти в диспетчере задач?
Я программирую в MS Windows.
Спасибо
Ниладри
PS - я попытался использовать release_memory, упорядочив пул (order_malloc), но он всегда возвращает false.
UPDATE:
Еще не пробовал purge_memory, так как пул разделен между двумя потоками. Но обнаружили, что release_memory работает, но только для упорядоченных пулов и медленно освобождает память, поскольку освобождает только блоки памяти без выделения.
Я уверен, что продувка будет работать быстрее.