IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[lib MPFR] Fuites mémoires


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut [lib MPFR] Fuites mémoires
    J'utilise la lib MPFR pour le calcul à précision arbitraire.
    Je constate que lors de grandes opérations, la mémoire enfle jusqu'à faire crasher mon appli. C'est directement lié à l'utilisation des objets de MPFR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //Grosse boucle
     
    		mpfr_t temp;
    		mpfr_init(temp);
    		mpfr_init_set_d(temp, 0.5, MPFR_RNDN);
     
                    //opérations ...
     
    		mpfr_clear(temp); 
     
    //fin grosse boucle
    Si quelqu'un pourrait m'aider à régler ce problème je vous en serez reconnaissant.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Alors avec si peu d'info ça me paraît compromis.
    Le problème avec les calculs en précision *arbitraire* c'est que la conso mémoire aussi est arbitraire...les chiffres significatifs en plus doivent bien être stockés quelque part...
    Après ça dépend de ce que tu fais...

  3. #3
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    Je fais pas grand choses avec, juste quelques multiplication et addition.

    Normalement, si j'ai bien compris, la fonction mpfr_clear doit "libérer" la mémoire et donc l'espace occupé par les chiffres significatifs. Mais je n'ai pas l'impression qu'elle le fasse.

    Tu veux plus d'info sur quoi? N'hésite pas à me demander.

    J'utilise VS2010.
    Pour fixer la précision je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mpfr_set_default_prec(160);
    J'enregistre donc les chiffres significatifs sur 160 bits.

    Merci

  4. #4
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    J'appelle une procédure 1 million de fois. C'est dans cette procédure que j'utilise les structures mpfr_t de la manière dont j'ai donné un exemple dans le 1er post:
    - déclaration
    - initialisation
    - affectation
    - [... opérations...]
    - libération

    Peut-être que je le fait mal et dans ce cas je suis preneur de toute infos.

    Merci

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Cette API est C...donc faut faire "comme en C": quels sont les appels qui allouent? Y'aurait pas des appels qui créent des stockages intermédiaires jamais désalloués?

  6. #6
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    Voici l'extrait de la doc officielle:

    An mpfr_t object must be initialized before storing the first value in it.

    void mpfr_clear (mpfr t x)
    Free the space occupied by the significand of x. Make sure to call this function for all mpfr_t
    variables when you are done with them.

    Il y a même une fonction free_memory_cache() pour libérer la mémoire du cache mais ça ne change rien.

    Au pire des cas, vu que ce sont des variables locales, elles doivent "disparaitre" quand je quitte la fonction.

    Je continue de chercher de mon côté!

    Merci

  7. #7
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    J'ai trouvé mon erreur et sur le coup j'ai vraiment fait de la m....

    En fait, mpfr_init_set_d initialise aussi comme mpfr_init. Je me retrouve donc avec deux zone mémoire réservées. Mais quand je faisais le clear, je ne "nettoyais" que la dernière...

    Évident à posteriori!

    Désolé et merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 10h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo