2011-11-17 3 views
2

Utilisation de RapidXML J'ai besoin de créer et de détruire un grand nombre de nœuds XML et d'attributs XML. J'ai lu dans la documentation du pool de mémoire qu'il n'y a pas moyen de libérer une seule chaîne créée dans le pool de mémoire avec la fonction allocate_string.RapidXml et pool de mémoire

Mais de cette façon, la taille du pool de mémoire augmentera et il me semble que le problème ne sera pas de supprimer des chaînes liées à des attributs ou des noeuds qui ne sont plus utilisés. Ma peur est de remplir l'espace du pool de mémoire avec un système trop dynamique dans lequel je crée et détruis beaucoup de nœuds sans schéma connu "a priori".

Existe-t-il un moyen d'ignorer ce problème?

Ajouté:

documentation de lecture, j'ai trouvé la memory_pool :: set_allocator fonction et à première vue, il semble résoudre ma question. J'ai essayé d'utiliser cette fonction mais je n'ai pas réussi. Quelqu'un at-il déjà utilisé la fonction set_allocator? Je n'ai pas trouvé d'exemples ou de références sur internet.

Répondre

2

Les pools de mémoire dans rapidxml ne prennent pas en charge la désallocation (autre que la libération de l'ensemble du pool). En effet, ils sont conçus pour fournir une performance d'allocation maximale lors de l'analyse, et vous n'avez pas besoin de libérer des nœuds dans ce scénario.

Si vous devez allouer et libérer manuellement des nœuds, rien ne vous empêche d'allouer des nœuds à partir du tas en utilisant new/delete.

La fonction set_allocator ne sera pas utile ici. Il vous permet de remplacer le mécanisme d'allocation pour l'ensemble du pool, pas pour les nœuds individuels.

Questions connexes