RapidXml и пул памяти - PullRequest
       20

RapidXml и пул памяти

2 голосов
/ 17 ноября 2011

Используя RapidXML, мне нужно создавать и уничтожать множество узлов XML и атрибутов XML. Я прочитал в документации по пулу памяти, что нет способа освободить одну строку, созданную в пуле памяти, с помощью функции allocate_string.

Но при этом размер пула памяти будет увеличиваться, и мне кажется, что проблема не заключается в удалении строк, связанных с атрибутами или узлами, которые больше не используются.

Я боюсь заполнить пространство пула памяти слишком динамичной системой, в которой я создаю и уничтожаю множество узлов без "априорной" известной схемы.

Есть ли способ пропустить эту проблему?

Добавлено:

Чтение документации. Я нашел функцию memory_pool :: set_allocator , и на первый взгляд кажется, что она решает мой вопрос. Я пытался использовать эту функцию, но мне не удалось. Кто-нибудь когда-нибудь использовал функцию set_allocator? Я не нашел примеров или ссылок в интернете.

1 Ответ

2 голосов
/ 25 января 2012

Пулы памяти в rapidxml не поддерживают освобождение (кроме освобождения всего пула). Это связано с тем, что они предназначены для обеспечения максимальной производительности выделения при разборе, и вам не нужно освобождать узлы в этом сценарии.

Если вам нужно вручную распределить и освободить узлы, ничто не помешает вам выделить узлы из кучи, используя new / delete.

Функция set_allocator здесь не будет полезна. Это позволяет заменить механизм выделения для всего пула, а не для отдельных узлов.

...