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 :

Differences Stack et Heap [FAQ]


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Par d�faut Differences Stack et Heap
    Je viens de relire une aide sur une API qui parle de Stack et de Heap ce qui doit correspondre au tas et a la pile si ma memoire est bonne ...

    Mais je sais absolument plus a quoi ca correspond et ou se cree nos variables et nos instances de classe dans Heap ou Stack ?


    Merci pour l'aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Par d�faut
    Bonjour,

    Heap (le tas) : c'est l� que l'on instancie tous les objets.
    Stack (pile) : on essaye de n'y placer que les types de base, ainsi que des pointeurs ... d'o� l'utilisation de new

    B.

  3. #3
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    28
    D�tails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Par d�faut
    donc quand je cree un objet a partir d'une classe je le cree dans le tas
    et quand je creer un int ou un char par exmple il se cree dans la stack ?

    jusque la ok

    Mais a quoi me sert le new alors ? et ou se cree les objets que je cree avec un new ? Faut il prendre des mesures precises avant d'ecrire dans la stack ou dans le heap ? Passque j'au trouve des API qui propose des fonctions pour etre sur qu'on deborde pas du tas ou de la pile ...

    Ouais je sais ca en fait des questions

  4. #4
    Expert �minent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 379
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 379
    Billets dans le blog
    1
    Par d�faut
    Non ce n'est pas �a.

    Toute variable globale (et variable locale d�clar�e "static") est stock�e dans le segment de donn�es.
    Toute variable locale � une fonction (non "static") est stock�e dans la pile (stack).
    Toute zone m�moire allou�e par new est stock�e dans le tas (heap), zone situ�e apr�s le segment de donn�es.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 19
    Par d�faut
    Merci Anomaly pour tes pr�cisions

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Par d�faut
    Merci effectivement, mais je souhaiterais avoir un peu plus de pr�cisions, si possible...
    Quand on fait un malloc ou un new dans une DLL, on ne peut faire de free ou de delete � partir d'une autre DLL, m�me si elles sont charg�es dans le m�me programme. En gros, quelle est la port�e d'un heap ?
    De plus, (enfin on m'a toujours dit qu') il n'y a que 3 Segments dans un programme :
    • - un segment de donn�es
      - un segment de pile
      - et un segment de code

    Si, comme tu le laisses entendre, le heap est situ� apr�s le segment de donn�es, dans quoi est il stock� ?
    Merci d'�clairer ma petite lanterne (rouge)...

    @+
    Joe

    P.S.: je serai pas contre un petit rappel de l'ordre de ces segments

  7. #7
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pour les sp�cificit�s des DLL, j'avoue ne plus savoir comment �a marche en d�tail. Il faudrait que je relise le bouquin de Jeffrey Richter. Cela a peu derapport avec le langage, c'est li� � l'OS.

    Par contre, en C++ c'est plus compliqu� que tas vs pile. Car on a bien:
    - le tas (utilis� par malloc() et free())
    - et la pile (pour les variables automatiques),

    mais on a aussi :
    - le free-store (news et deletes ; son lien avec le tas n'est pas sp�cifi�),
    - les donn�es constantes (read-only, "chaines de caract�res" et autres petits trucs connus � la compilation => pas d'objets ; impl�mentation propre � chaque compilateur et ses options de compilation),
    - et les variables globales et statiques (place pr�vue au lancement du programme, mais construction retard�e jusqu'au moment o� l'ex�cution passe par la d�finition de la donn�e ; aucune certitude quant � l'ordre de construction de celles ci si elles sont au niveau global et r�parties dans plusieurs unit�s de traduction difff�rentes)

    cf Item 35 de Exceptional C++ d'Herb Sutter, publi� chez Addisson Wesley. La version pr�-publication de cet item doit �tre disponible sur GOTW (google!)

    Pour ce qui est des trois segments, c'est une version simplifi�e de la r�alit�.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Par d�faut
    Bon, si les DLLs ont leur logique interne propre, que se passe-t-il au niveau des threads (en gros, qui partage quoi ?). Car s'il n'est pas possible d'allouer/d�saollouer d'une DLL � l'autre, il y a bien une cause !...

    La suite n'est pas tr�s claire (pour moi du moins) : le tas est utilis� par malloc et free ? et new et delete utilisent le free-store (k�zako? o� ca se situe ?) Il me semblait que new appelait malloc et delete, free.

    Tout ce que tu me dis est bel et bon, mais comment puis-je savoir o� est ce satan� "tas" et que repr�sente-t-il (� part �tre l'espace o� sont contenus les objets cr��s par malloc)

    Le free-store (et le heap) occasionnent-ils de nouveaux segments ? de nouveaux types de segment ?

    Si ma vision d'un programme (3 segments) est trop r�ductrice, quels sont les aspects que j'ai escamot� ?

    Au fait, ce site peut �tre int�ressant mais je n'ai rien trouv� concernant ces points la, et puis je ne veux pas m'acheter ce livre juste pour mon stage...

    Merci de ton attention.
    @+
    Joel

    P.S.: oups j'ai un peu abus� au niveau des questions. Mais si je peux encore me permettre, quelle est le ratio de gain de performance entre une allocation dynamique et une allocation statique ?

  9. #9
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pour les DLLs, ce n'est pas vraiment le bon endroit pour demander cela.

    Pour le free-store et compagnie : http://www.gotw.ca/gotw/009.htm. Soit, rien n'est assur�. Il peut y avoir un lien direct ou non entre le free-store et le tas. new n'appelle pas n�cessairement malloc, on peut le modifier pour avoir notre propre gestionaire de m�moire qui lui appellera juste une fois ou 42 fois malloc() ou une fonction li�e � l'OS.

    Tu n'as pas � savoir o� est le tas. Il est. Et c'est tout ce dont tu as besoin de savoir pour 99% des applications que tu auras � programmer. Toutes les r�ponses � ces questions seront dans le bouquin de Richter. Si tu as vraiment besoin de savoir �a pour ton stage, alors fait le acheter par ta boite, car si ils te demandent ce genre de choses, ils auront besoin de savoir plus pr�cis�ment comment �a marche.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    88
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 88
    Par d�faut Merci !!!
    Ah cool magnifique !
    J'ai du me d�brouill� comen une M****... Ton article est ce qu'il me fallait pour comprendre. En fait c'est pas mon maitre de stage qui me demand, c'est plutot moi qui voudrais savoir... Car je me suis d�j� retrouv� avec une mauvaise gestion de pointeurs qui m'emmenait vers dbgheap.c et je voulais savoir plus en d�tail comment ca se passait par la suite...

    J'�tais au courant pour new, mais je ne consid�rais que le comportement de base, sans surcharge de l'op�rateur, ce qui est le cas dans 90% des programmes au moins (m'enfin je pense...)

    Merci encore pour ton efficacit�, Luc. Tu m�rites une m�daille (en chocolat au moins !)

Discussions similaires

  1. heap et stack
    Par Shivan dans le forum Langage
    R�ponses: 6
    Dernier message: 22/10/2009, 12h01
  2. Diff�rence d'adresse m�moire stack et heap
    Par easyquizz dans le forum C++
    R�ponses: 16
    Dernier message: 29/01/2009, 22h26
  3. mise au point sur la new, class, stack et heap
    Par cdm1024 dans le forum C++
    R�ponses: 1
    Dernier message: 18/03/2008, 15h21
  4. Stack, Free store, Heap etc
    Par buzzkaido dans le forum C++
    R�ponses: 4
    Dernier message: 29/09/2007, 18h04
  5. [general] differences entre les differentes heap
    Par deeal dans le forum C++/CLI
    R�ponses: 6
    Dernier message: 04/08/2006, 17h28

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