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 :

Allocation dynamique de mémoire : problème de fragmentation


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Par défaut Allocation dynamique de mémoire : problème de fragmentation
    Bonjour à tous,

    Je rencontre un problème d'allocation mémoire dynamique avec un programme.
    Celui-ci alloue des blocs mémoires (via l'opérateur new) de petites tailles mais aussi de très gande taille (tableaux de plusieurs milliers d'objets).
    Je ne pense pas qu'il y ait de fuite mémoire.

    Cependant, je finis par obtenir une exception bad_alloc lors de l'allocation d'un grand tableau. Cette exception est déclenchée lorsque new ne trouve pas la place disponible pour l'objet créé.

    Je pense que cela est du au fait que mon espace mémoire fini par être très fragmenté en raison du grand nombre de petits blocs alloués jusqu'au moment où il n'y a plus la place entièrement vierge suffisante pour un grand tableau. En effet, l'exception est toujours déclenchée lors de l'allocation d'un tableau et non d'un objet de petite taille.

    Je me demande s'il est possible de définir 2 zones d'adresage dynamique. L'un dans lequel, j'allouerais mes objets de taille raisonables et l'autre pour les tableaux de grande taille.

    Merci pour vos tuyaux et remarques en tout genre,

    Arnaud

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Salut,

    Avant de démarrer sur une piste qui pourrait devenir compliqué, est-ce que tu as essayé de désallouer la totalité de tes petits objets juste avant d'allouer ton grand tableau. S'il n'y a plus d'erreur, tu as effectivement surement un pb de fragmentation. Sinon ton erreur vient surement d'ailleurs (fuite mémoire, corruption du tas, écriture dans une zone non allouée, débordement d'indice, ...).

    Note : pour désallouer tes petits objets au bon moment, intercepte l'exception bad_alloc dans un try ... catch.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Par défaut
    Oui c'est une sage idée.

    En fait, ca va être assez difficile à distinguer d'une fuite mémoire vu que (je suppose) la mémoire attribuée à un processus comprend également les "trous" du gruyère de la heap. Donc si la mémoire attribuée tend à augmenter, cela ne veux pas forcément dire que la mémoire utile augmente et donc qu'il y a fuite. ca peut-être aussi lié à une plus grande fragmentation.

    Au moins, ca permettra de distinguer d'une corruption mémoire.
    Je fais le test.

    A bientôt

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par arnoldo165 Voir le message
    cela ne veux pas forcément dire que la mémoire utile augmente et donc qu'il y a fuite. ca peut-être aussi lié à une plus grande fragmentation.
    Effectivement on ne peut pas se fier à la taille totale utilisé par un proc. Ca ne peut donner qu'un premier niveau d'information.
    Surtout pour la détection de fuite ; il existe des outils / libs. faites pour ça. D'autant plus que les fuites mémoires ne sont que UN des pbs. liés à l'alloc. dyn. il en existe des tas d'autres plus horribles (cf. ci-dessus).

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/09/2009, 17h40
  2. Allocation dynamique de mémoire : Limitations ?
    Par rulianf dans le forum C++
    Réponses: 5
    Dernier message: 22/03/2006, 17h03
  3. Allocation dynamique de mémoire
    Par cd090580 dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 12/11/2005, 11h17
  4. [VC++/ASM] Allocation dynamique de mémoire ?
    Par Magus (Dave) dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 21/12/2004, 15h05
  5. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31

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