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 :

Mémoire dynamique / Mémoire statique


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 66
    Points
    66
    Par défaut Mémoire dynamique / Mémoire statique
    Bonjour,

    je voudrais savoir quelle est concrètement la différence entre créer un objet sur la pille ou sur le tas.

    Merci

  2. #2
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un objet créé sur la pile sera détruit dès la sortie de la portée dans laquelle il est déclaré.
    Un objet créé sur le tas ne sera détruit que lorsque tu utiliseras delete.

    Une différence qui peut également jouer est que la pile a une taille très limitée.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Il y a aussi une différence de vitesse à l'execution. Créer sur la pile c'est immédiat et ça marche à tous les coups (ou presque, mais si ça ne marche pas tu n'es plus là pour le voir), créer sur le tas demande plus de travail (trouver une place libre, tenir une table à jour, vérifier que la demande a été satisfaite).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Laurent Gomila
    Un objet créé sur le tas ne sera détruit que lorsque tu utiliseras delete.
    Sera-t-il detruit lors de l'arret du programme ?

  5. #5
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par _LVEB_
    Sera-t-il detruit lors de l'arret du programme ?
    Les objets ne seront pas détruits (ie. leur destructeur ne sera pas appelé) mais à part ça tout bon OS libérera la mémoire à la fin du programme.

    Donc autant dire qu'il ne vaut mieux pas compter sur l'OS, et libérer proprement les objets alloués dans ton programme.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pour allouer sur la pile, tu auras besoin de connaître la taille à allouer à la compilation, alors que pour l'allocation dynamique il suffit de connaître cette taille à l'execution.

    Edit: correction.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par loufoque
    Pour allouer sur le tas, tu auras besoin de connaître la taille à allouer à la compilation, alors que pour l'allocation dynamique il suffit de connaître cette taille à l'execution.
    Ah? J'avais compris que dynamique==tas==new/delete et statique==pile

  8. #8
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Il a juste fait un lapsus.

  9. #9
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    Mais ensuite, l'enjeu est de bien désallouer toute la mémoire précédemment allouée!

    No Leak!

Discussions similaires

  1. Mémoire disponible / Vérification statique
    Par Djoulaïe04 dans le forum Fortran
    Réponses: 2
    Dernier message: 12/02/2009, 12h38
  2. mémoire dynamique des threads
    Par seb__ dans le forum C
    Réponses: 2
    Dernier message: 01/01/2007, 15h45
  3. Utilisation de la mémoire dynamique
    Par Stany dans le forum Windows
    Réponses: 17
    Dernier message: 27/04/2006, 11h39
  4. [debutant] : Allocation de mémoire dynamique
    Par sam.fet dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2006, 14h58
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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