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

SL & STL C++ Discussion :

Gestion mémoire deque


Sujet :

SL & STL C++

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par défaut Gestion mémoire deque
    Bonjour,
    Je fais du traitement d'image 3d donc des grosses données avec une gestion par file d'attente.
    Je suis tombé sur ce probleme que je résume avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    int main()
    {
      deque< int > d;
      int max = 100000;
      for(int i=0;i<1200;i++)
      {
     
        for(int j=0;j<max;j++)
    //SOIT PUSH_BACK, SOIT PUSH_FRONT
          d.push_back(i);
        //d.push_front(i);
      }
     
      while(d.empty()!=true)
      {
        d.pop_front();
      }
      d.resize(d.size());
      cout<<"taille "<<d.size()<<endl;
      while(1!=0)
      {
      }
    }
    Le probleme est qu'avec push_front. Tout marche sur des roulettes. Je vois que mon processus utilise 0% mémoire dans la boucle infini en revanche si il y a
    push_back à la place du push_front, mon processeur utilise 50% de mémoire dans la boucle infini et pourtant la taille du conteneur est de 0.
    Mes questions sont:
    Comment demander au conteneur de reserver uniquement la place mémoire équivalent à sa taille?
    Existe-il un conteneur qui automatiquement va retailler la place mémoire utilisée?

    PS: J'ai essayé d.resize(d.size()) mais cela ne marche pas.
    PPS le probleme est similaire avec le conteneur queue.
    Merci de votre aide

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    les 2 méthodes pour gérer la mémoire avec les vecteurs et deques:
    1/ fonction membre reserve.

    Cette méthode fonctionne lorsque la taille du conteneur est 0.

    2/ fonction membre swap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    deque<int>(taille).swap(d);
    // ou, pour vider totalement le conteneur:
    deque<int>().swap(d);
    Hope it helps.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Ca là :
    Ca ne fait rien (d a déjà pour taille d.size(), forcément...), c'est donc normal que ça ne change rien déjà...

    Si tu veux forcer la libération de la mémoire 'en trop' pour retailler le conteneur à "juste ce qu'il faut" il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::deque<int>( d ).swap( d );
    Il n'y a pas d'autre solution (avec les conteneurs STL) et rien d'automatique...

    MAT.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par défaut
    Merci pour vos réponses rapides

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

Discussions similaires

  1. Thread POSIX et gestion mémoire
    Par pier* dans le forum POSIX
    Réponses: 1
    Dernier message: 07/07/2006, 21h36
  2. TAO, Value types et gestion mémoire
    Par TiChabin972 dans le forum CORBA
    Réponses: 1
    Dernier message: 25/04/2006, 20h55
  3. [D7] Tableau dynamique et Gestion mémoire
    Par Cl@udius dans le forum Langage
    Réponses: 7
    Dernier message: 13/03/2006, 15h16
  4. [Gestion mémoire] SetLength sur TDoubleDynArray
    Par MD Software dans le forum Langage
    Réponses: 14
    Dernier message: 24/04/2005, 21h11
  5. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34

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