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 :

Probléme étrange sur l'allocation mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut Probléme étrange sur l'allocation mémoire
    Bonjour,

    Je suis sur un projet ,qui utilise beaucoup de pointer.
    Quand ma mémoire arrive à saturation , l'allocation échoue bien évidemment.
    Le hic , c'est quand je libère la mémoire , je vois pourtant bien dans le gestionnaire de tache que la mémoire utilisé diminue
    une allocation mémoire demandé de 700 Mb échoue avec l'exception "Out of memory" sachant qu'il reste environ 2Gb de mémoire disponible et que à ce moment là ,mon projet n'utilise que 500 Mb de mémoire.
    En passant par la méthode new et free , j'ai essayer la fonction VirtualAlloc pour les 700 Mb , même soucis.

    Comment résoudre ce problème ?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Ou là
    Chaque application se voit allouer une "portion de mémoire" par le système d'exploitation: donc ton ordinateur peut avoir 2, 4, 12, 24 Gigas en mémoire centrale, mais ton application maximum 1 ou 2 Gigas

    Dis-nous ton système d'exploitation et surtout s'il est 32 ou 64 bits?

    Édit: Un papier d'Intel de 2011 peut-être pas pertinent, mais qui montre le problème: Memory Limits for Applications on Windows

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par yann458 Voir le message
    En passant par la méthode new et free
    Mes yeux saignent... new et delete, ou bien malloc et free. Ne jamais mélanger les deux types d'allocation.

    ps: je sais, c'est un jamais d'informaticien...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et aussi, new[] et delete[]. Trop d'apprentis programmeurs ne connaissent même pas l'existence de delete[].
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Par défaut
    Bonjour,

    J'avais eu un probleme similaire il y a quelques temps avec un programme en developpement qui pouvait demander jusqu'a 10GO de memoire.
    Ma solution fut de compiler en 64bits.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    la première chose à faire dans ce genre de cas, c'est de passer un memory checker pour voir s'il y a des fuites, et où. Une fois les fuites corrigées (c'est vite dit mais c'est pas forcément facile au contraire !), à ce moment là seulement il faudra t'intéresser à d'autres stratégies pour économiser la mémoire.

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    hormis les problèmes de limite par applications cités précédemment, il faut aussi regarder comment ta ram est fragmentée...

    plus précisément si ton programme fait une grosse allocation de 700 Mo avec un seul malloc/realloc (façon C) ou new (façon C++), et si ma mémoire est bonne, le système dans ce cas cherchera un bloc de mémoire contiguë de 700 Mo. donc même s'il te reste 2 Go de ram, si la fragmentation de ta RAM fait qu'il n'y a pas de zone contiguë suffisamment grande pour recevoir ta demande d'allocation elle échouera.


    Ceci dit quand un programme consomme beaucoup de mémoire il faut regarder s'il n'y a pas de duplication de données inutile, et regarder les fuites éventuelle avec un programme comme valgrind par exemple.

Discussions similaires

  1. Problème d'allocation mémoire sur requête Oracle.
    Par peaceinpal dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2011, 09h41
  2. Précision sur pre-allocation mémoire et sum([C{1,:}])
    Par 20905313t dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/02/2011, 12h01
  3. Réponses: 17
    Dernier message: 27/03/2009, 17h09
  4. [Tableaux] probléme étrange sur un array
    Par boadog dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2007, 10h43
  5. [xp] problème étrange sur le système de fichiers
    Par Huntress dans le forum Windows XP
    Réponses: 4
    Dernier message: 05/03/2006, 20h15

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