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 :

Allocation mémoire avec les conteneurs


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut Allocation mémoire avec les conteneurs
    Salut la compagnie !

    Petite question que je me pose concernant les conteneurs de la STL ... où se fait l'allocation mémoire ?

    Un exemple précisera ma question .

    Si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::map<int, int>* _pMap = NULL;
    _pMap = new std::map<int, int>;
    Bon, jusque là je crois comprendre que la mémoire allouée l'est sur le tas.

    Maintenant, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _pMap->operateur[](5) = -1;
    Est ce que le conteneur alloue de la mémoire dans la pile ou sur le tas ?

    Ca peut paraître étrange comme question mais je travaille dans un contexte où la mémoire est critique et il faut tout instancier au démarrage du système en évitant si possible de charger trop la pile.

    Voila, vous savez tout, d'avance merci pour vos réponses.

    Bonne soirée tout le monde.

    PS : si vous savez comment je peux faire pour faire autrement que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _pMap->operateur[](5) ...
    ... je suis preneur

  2. #2
    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
    La vraie question, ça serait plutôt de ce demander pourquoi tu alloues ta map sur le tas, ça casse un peu tout l'intérêt des conteneur de la STL.. (RAII etc).

    Pour te répondre, la map alloue en interne sur le tas (d'où l'intérêt de manipuler la map directement et non via un pointeur).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    Si la map alloue sa mémoire sur le tas, ça me va.

    Comme je n'étais pas certains, je me demandais simplement si le fait d'instancier une map sur le tas faisait que la map allouait sa mémoire nécessaire sur le tas ... réciproquement pour la pile.

    Merci pour ta réponse.

    Petite question à nouveau ... j'aimerai savoir comment tu sais comment la map alloue sa mémoire ?

    D'avance merci.

    Bonne soirée.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Petite question à nouveau ... j'aimerai savoir comment tu sais comment la map alloue sa mémoire ?
    Tout ce qui est dynamique est forcément alloué sur le tas. Les allocations sur la pile ça ne peut concerner que les variables locales, et leur espace mémoire est réservé dès la compilation.

    Sinon si tu veux contrôler les allocations mémoire (pour utiliser par exemple un pool pré-alloué), tu peux jeter un oeil aux allocateurs.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    std::map<> demande 4 paramètres template:
    template<class _K, class _Ty, class _Pr = less<_K>, class _A = allocator<_Ty> >
    La 4ème détermine où est allouée la mémoire de gestion interne au map. Par défaut c'est sur le tas.

Discussions similaires

  1. problème avec les conteneurs STL
    Par burak dans le forum SL & STL
    Réponses: 7
    Dernier message: 19/04/2009, 17h43
  2. Problème de mémoire avec les datasets
    Par Hartdrooz dans le forum C#
    Réponses: 6
    Dernier message: 06/05/2008, 21h22
  3. Probleme avec les conteneurs sur visual c++ 2005 express
    Par auron1 dans le forum Visual C++
    Réponses: 22
    Dernier message: 01/01/2008, 14h34
  4. [GD] Problème de mémoire avec les grandes images en PHP
    Par bodysplash007 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/04/2007, 17h02
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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