Libération de mémoire dans une application

Résolu
cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010 - 13 juin 2008 à 12:29
cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010 - 17 juin 2008 à 09:54
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

cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010
17 juin 2008 à 09:54
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 !
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 juin 2008 à 15:03
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.
0
cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010
13 juin 2008 à 15:07
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...
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 juin 2008 à 16:05
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)?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 16:08
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++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2008 à 16:08
Oops, juju12 m'a devancé.

C++ (@++)<!--
0
cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010
13 juin 2008 à 16:08
Oui, je crée des char*, des maps et des lists, que je delete également à la suppression des objets...
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
13 juin 2008 à 16:11
ben faut croire que t'en as oublié...puis-je te suggérer de re-vérifier en détail?
0
cs_Rankin Messages postés 52 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 27 avril 2010
13 juin 2008 à 16:19
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 !
0
Rejoignez-nous