2010-12-07 37 views
0

Je suis donc à la recherche de opensource, crossplatform (au moins win, lin) bibliothèque qui ferait le garbage collection sur certains threads/processus C++ abstraits ... Donc dire être un processus séparé pour la gestion de la mémoire d'application ... ou au moins me présenterait avec quelques fonctions pour la suppression de mémoire non utilisée en regardant mon processus ... Y en a-t-il de tels? Est-ce que boost peut m'aider avec ça?Garbage collector qui fonctionnerait en dehors de mon application?

Mon principal point est de trouver un tel garbage collector qui serait capable de fonctionner sur le dessus de mon code C++ normal/.. Je veux dire aucune allocation de mémoire spéciale aucune utilisation spéciale de celui-ci dans le code de programmation principal .... juste en quelque sorte se relier à mon processus et le surveiller ... donc je suis intrested dans tel gc qui fonctionnerait sur le dessus du processus et le nettoyage pour dire les vieux blocs de mémoire non utilisés ...

Alors laissez-moi décrire le problème dans un peu plus de détails: j'ai un code qui fonctionne généralement par lui-même. mais de temps en temps, il met juste 2-3 mbs en RAM et que jamais retrn utiliser tham - je sais que ce n'est pas - j'ai écrit du code après tout ... alors c'est pourquoi j'ai besoin de certains sur mon application gc.

+3

Pourquoi avez-vous besoin d'un éboueur? Bien qu'il y ait des garbage collectors pour C++, la plupart du code C++ est écrit en supposant qu'il n'y a pas de garbage collection. Il ne va pas y avoir un garbage collector pour C++ que vous pouvez simplement laisser tomber dans le code C++ et s'attendre à ce qu'il fonctionne hors de la boîte. –

+1

En outre, cette question est une copie possible de [Garbage collectors for C++] (http://stackoverflow.com/questions/81062/garbage-collectors-for-c). –

+1

@In Silico: L'exigence de l'OP de fonctionner sur un thread ou un processus arbitraire est un gros problème. Ce n'est pas une dupe. – Puppy

Répondre

1

Je n'ai jamais entendu ou vu un système de gestion de la mémoire qui se branche au niveau du processus ou du thread au lieu du niveau du code source. Sans la source, vous n'auriez jamais assez d'informations sur le programme pour voir quelle mémoire est toujours référencée et quelle collection d'octets arrive à ressembler à un pointeur vers cette adresse.

+0

Au moins cette question est meilleure que son précédent: http://stackoverflow.com/questions/4380324/having-a-function-that-returns-int-how-to-run-it-is-seprate-thread- utiliser-boost – chrisaycock

1

Vous pouvez essayer éboueur conservateur marquage Boehm:

http://www.hpl.hp.com/personal/Hans_Boehm/gc/

Je n'ai jamais utilisé moi-même, mais si vous pouvez obtenir votre fil/processus cible pour créer un lien vers sa fonction alloc et ne rien faire, vous pouvez être avec une chance. Les détails de la liaison dynamique sont bien sûr spécifiques à la plate-forme.

Prenez garde au fait qu'il ne tombera pas simplement au-dessus de tous code C++. Si vous avez des destructeurs qui font autre chose que de la mémoire libre, alors je suppose que vous avez de la difficulté, car bien que le GC prenne en charge les finaliseurs, (a) la finalisation est fondamentalement différente de la destruction dans le sens où elle ne fonctionne pas rapidement et (b) de toute façon, il nécessite des changements de source. Il est probablement préférable de corriger les fuites de mémoire dans votre code C++ .-p La plupart des bibliothèques C++ sont écrites en supposant que vous utiliserez des techniques C++ typiques pour la gestion des ressources, et qu'elles ne seront pas forcément compatibles avec GC. .

5

Je pense que votre temps serait mieux utilisé pour réparer votre fuite de mémoire. Ce pourrait être un symptôme d'un autre bug plus grave.