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 :

VAS fragmentée, new/delete dans une boucle


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut VAS fragmentée, new/delete dans une boucle
    Bonjour,

    je ne comprend pas un truc. Quand on fait new/delete trop souvent, qu'est ce qui est fragmenté, la mémoire virtuelle ou la mémoire physique?
    Et comment se fait-il qu'au bout d'un certain temps on a plus de mémoire virtuelle.
    Admettons que dans une boucle infinie, je fait new int, delete. Quand je delete, et que je réalloue avec le new un objet de meme taille, meme si la memoire est fragmentée, les fragments vides ont la meme taille que l'objet que je veux allouer, donc il devrait pouvoir etre allouer.
    J'ai l'impression que quand on fait new et delete, une addresse virtuelle déja utilisée une fois avec le new, n'est jamais "libérée".
    Pouvez-vous m'éclaircir la dessus svp
    Merci

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Quand tu fais un delete sur la mémoire, ca appelle le destructeur de ton objet et tu te contente de dire à l'os que la mémoire est dispo et qu'il peut en faire ce qu'il veut. Il peut juste le noter, mettre la mémoire à zéro, te la redonner si tu en redemande, ...

    On ne peut tirer aucun comportement général, tout va dépendre de l'os, c'est lui le chef.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut
    Merci pour ta reponse, mais cela n'explique pas pourquoi au bout d'un certain temps, quand on fait new/delete, on a plus de mémoire virtuelle.
    J'aimerais bien comprendre

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par kaiser92 Voir le message
    Merci pour ta reponse, mais cela n'explique pas pourquoi au bout d'un certain temps, quand on fait new/delete, on a plus de mémoire virtuelle.
    J'aimerais bien comprendre
    C'est ce que je disais. Tu semble ne plus avoir de mémoire virtuelle. Je n'ai jamais eu ce problème avec les codes que tu montres dans un autre sujet. Sans précisions sur ton OS on ne peut rien dire.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut
    Mon OS est win32 XP, c'est un probleme connu, tu le vois avec performance monitor, les privates bytes, memoire physique et virtual bytes = memoire virtuelle.
    Avec ce genre de boucle new/delete infinie, la memoire physique est en dents de scie, ce qui est normal, allocation/deallocation, mais la memoire virtuelle augmente graduellement, jusqu'a ce que ton new plante, plus de memoire virtuelle.
    Ma question est pourquoi donc la memoire virtuelle n'est jamais libérée?
    J'aimerais comprendre ces mecanismes de memoire virtuelle, et commencant par ce topic ca m'aiderais beaucoup.
    Merci

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par kaiser92 Voir le message
    Mon OS est win32 XP, c'est un probleme connu, tu le vois avec performance monitor, les privates bytes, memoire physique et virtual bytes = memoire virtuelle.
    Avec ce genre de boucle new/delete infinie, la memoire physique est en dents de scie, ce qui est normal, allocation/deallocation, mais la memoire virtuelle augmente graduellement, jusqu'a ce que ton new plante, plus de memoire virtuelle.
    Ma question est pourquoi donc la memoire virtuelle n'est jamais libérée?
    J'aimerais comprendre ces mecanismes de memoire virtuelle, et commencant par ce topic ca m'aiderais beaucoup.
    Merci
    Ce qu'on essaye de te dire, c'est que c'est à voir avec ton OS, ca rien à voir avec le C++. Il faut poster dans le forum Windows.

    Si tu veux comprendre toutes les histoires de mémoire virtuelle, réelle et co, il te faut un cours sur les OS et Wikipedia.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par kaiser92 Voir le message
    Merci pour ta reponse, mais cela n'explique pas pourquoi au bout d'un certain temps, quand on fait new/delete, on a plus de mémoire virtuelle.
    J'aimerais bien comprendre
    ?? Comme david, si on connait pas ton os on pourrait pas dire grand chose. Mais en ce qui me concerne c'est rare que j'ai a utilisé le swap...

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

Discussions similaires

  1. [PHP 5.3] Requete Delete dans une boucle
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2013, 16h22
  2. Dans une boucle, delete sans next
    Par Just-Soft dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/11/2008, 09h31
  3. [Tableaux] DELETE dans une boucle
    Par mikedimoi dans le forum Langage
    Réponses: 5
    Dernier message: 15/01/2006, 18h16
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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