Question

J'ai lu article LinuxJournal sur Boehm-Demers-Weiser bibliothèque garbage collector . Je suis intéressant de l'utiliser dans ma bibliothèque au lieu de ma propre implémentation de comptage de référence.

Je n'ai qu'une seule question: est-il possible d'utiliser gc seulement pour ma bibliothèque partagée et utiliser encore malloc / gratuit dans l'application principale? Je comprends pas comment les chèques gc le tas, donc je me inquiète de la performance gc dans ce cas et les effets secondaires possibles.

Était-ce utile?

La solution

L'exemple dans le manuel précise:

  

Il est généralement préférable de ne pas mélanger l'allocation recueillie-ordures avec le système malloc-free. Si vous le faites, vous devez faire attention de ne pas les pointeurs de magasin sur le tas des déchets collectés dans la mémoire allouée au système malloc.

Et plus spécifiquement pour C ++:

  

Dans le cas de C ++, vous devez être particulièrement prudent de ne pas les pointeurs de magasin au tas ramasse-miettes dans les zones qui ne sont pas retracées par le collecteur. Le collecteur comprend certaines interfaces alternatives pour rendre cela plus facile.

En regardant le code source dans le manuel, vous verrez la mémoire est gérée recueillie des ordures par des appels spécifiques, par conséquent, la gestion est gérée séparément (soit par le collecteur ou manuellement). Donc, tant votre bibliothèque gère ses internes correctement et ne pas exposer la mémoire recueillie, vous devriez être bien. Vous ne savez pas comment les autres bibliothèques gèrent leur mémoire et vous pouvez les utiliser aussi bien, ne vous? :)

Autres conseils

Je crois que oui, vous pouvez mélanger les deux: mais si vous allouez un objet avec la allocateur normale qui contient une référence à un objet que vous allouez à la poubelle la collecte un, alors que la volonté de référence ne pas être visible à la GC de sorte que l'objet peut être prématurément désallouée.

Jetez un oeil à la spécification de la fonction GC_MALLOC_UNCOLLECTABLE si vous avez besoin du GC pour tenir compte des références en mémoire qui ne doivent pas être collectées.

En résumé, oui, mais ici des dragons si vous ne faites pas attention!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top