Libération de mémoire dans une application [Résolu]

Signaler
Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010
-
Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010
-
Bonjour à tous !

Je bosse actuellement sur le développement d'un programme d'analyse de logs. Sans rentrer dans le détail, il ouvre des fichiers matchant avec un motif donné dans un répertoire spécifié, lit le contenu et enregistre des alertes dans une base de données si il récupères n occurrences d'un certain message, ou un message non identifié par l'administrateur.
Le fonctionnement est basé sur une architecture objet ; donc pour chaque message lu présentant a priori un intérêt, un certain nombre d'objets est créé en mémoire. Le programme est supposé tourner en arrière plan sur des serveurs, donc il est primordial qu'il ne consomme pas trop de mémoire. Tous mes objets créés sont créés par un new et supprimés par un delete, lorsque je n'en ai plus besoin ou que le programme est interrompu ; pareil pour les variables de type tableau effacées par delete[] ; j'ai vérifié par des écritures dans des fichiers qu'il y avait bien autant d'objets créés que supprimés.
Cependant, si je fais un top pendant l'exécution, je monte à 200Mo de mémoire consommée ; c'est normal parce que je lis énormément de lignes, mais après qu'elles soient lus la mémoire n'est pas libérée, elle ne l'est qu'après l'arrêt du programme...

Je fais donc appel à votre science pour savoir s'il n'est pas possible de faire des appels réguliers à un équivalent du garbage collector, ou quelque chose qui puisse "officialiser" la libération de la mémoire pendant l'exécution...

Merci à vous !

9 réponses

Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Bon, je cloture la discussion, Valgrind est vraiment génial pour debugger et contrôler les fuites de mémoire ! Je n'avais que quelques oublis mais ca suffisait pour faire exploser la consommation...
Merci pour vos réponses en tout cas !
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Ben c'est à toi de supprimer tes objets quand tu n'en as plus besoin. Si ta mémoire n'est pas libérée alors que tu as détruit tes objets, c'est que tu ne l'as pas fait correctement et que tu as des fuites mémoires quelque part, donc fouille ton code pour vérifier que TOUTE allocation de mémoire a une désallocation correspondante.
Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

C'est bien ca le problème... les objets sont supprimés ! j'ai fait un test en écrivant dans un fichier a chaque création d'objet, et dans un autre à chaque destruction. Il y a autant de lignes...
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Ca pour les objets OK mais à l'intérieur de ceux-ci, est-ce que tu alloues de la mémoire (genre des tableaux, des listes, ou n'importe quoi)?
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ce ne sont peut-être pas les objets qui ne sont pas désalloués.
As-tu d'autres allocations dynamiques dans ton code à part les objets ?

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oops, juju12 m'a devancé.

C++ (@++)<!--
Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Oui, je crée des char*, des maps et des lists, que je delete également à la suppression des objets...
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
ben faut croire que t'en as oublié...puis-je te suggérer de re-vérifier en détail?
Messages postés
52
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
27 avril 2010

Je viens de découvrir un debugger qui s'appelle Valgrind et qui est particulièrement bien foutu, j'ai apparemment quelques fuites. Damned, je pensais vraiment avoir rien oublié... bon, je vous tiens informé dans la semaine qui vient, en tout cas je crois vraiment que ce truc va bien m'aider à localiser mes oublis !