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++/CLI Discussion :

[general] differences entre les differentes heap


Sujet :

C++/CLI

  1. #1
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut [general] differences entre les differentes heap
    Bonjour,
    je voulais avoir une petite explication sur les differentes piles utilises par la CLR

    en effet j'ai compris un peu (j'espere)
    la managed heap : c'est la ou sont alloues tout les objets references cree par gcnew ( la je n'ai pas de confusion)
    j'ai plus confusion entre le stack et la CRT
    est-ce que sur la CRT sont alloues tout les objet references crees par new? (seulement), et le stack il n'a que les object value

    et est-ce la CLR alloue un espace managed heap pour chaque process?
    ou c'est une espace commun a toutes les application utilisant la CLR?
    et est-ce que c'est la meme chose pour les autres piles?

    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La CRT n'est pas une zone mémoire, mais la bibliothèque standard (C Run-Time Library)
    Et surtout, un tas (heap) est TOUT SAUF une pile (stack)
    • Managed heap : C'est le tas managé, où se trouvent en effet tous les objets de type référence.
    • CRT Heap : Tas non-managé de la CRT : Objets créés par new (et en C, zones mémoires allouées par malloc()).
    • Stack : Pile, contient toutes les variables locales des fonctions : Types valeur et références vers des objets de type référence.
      Il y a une pile par thread.
    • Pour les variables static/shared, je ne sais pas où elles sont mises en Managé. Mais en non-managé, c'est simplement dans la "zone de données statiques".

    Et pour information, il y a un process pour chaque programme .Net lancé, donc les données managées sont isolées (enfin j'espère, car les partager en interne serait vraiment débile).
    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.

  3. #3
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Médinoc
    Et pour information, il y a un process pour chaque programme .Net lancé, donc les données managées sont isolées (enfin j'espère, car les partager en interne serait vraiment débile).
    Merci Medinoc.
    juste pour le dernier point, je crois que avec .Net, on peut avoir un seul process pour plusieurs application, mais chaque application a son Application domain, non?

    pas defaut oui , on a un process pour chaque application et donc un seul AppDomain
    mais on peut demander au CLR de creer un seul process, et dedans creer plusieur APPDomain, et je voudrai bien voir comment est gerer la memoire comme cela

    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Désolé, je ne sais pas ce que sont les AppDomain. C'est un concept .Net ?

    Au niveau process, je ne connais que Fiber ∈ Thread ∈ Process ∈ Job.
    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 habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Médinoc
    Désolé, je ne sais pas ce que sont les AppDomain. C'est un concept .Net ?

    Au niveau process, je ne connais que Fiber ∈ Thread ∈ Process ∈ Job.
    oui c'est un concept du framework
    deja il y'avait un probleme pour un singleton d'une classe, car c'est un singleton au sein d'une AppDomaine, et pas du processus

    http://www.gotdotnet.com/team/clr/AppdomainFAQ.aspx
    tu peux voir ce lien si tu veux
    ou
    http://msdn2.microsoft.com/en-us/library/dah4cwez.aspx
    merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah oui, je viens de jeter un coup d'oeil.

    Si j'ai bien compris, un process peut en effet contenir plusieurs applications, chacune dans son AppDomain, mais seulement si elles sont type-safe (ce qui selon moi signifie "En C# sans zones 'unsafe' ou en C++/CLI compilé avec /clr:safe", sachant que pour le VB je ne sais pas).
    Cela doit vouloir dire qu'une application unsafe est toujours lancée dans un nouveau processus.

    Mais apparemment, on ne peut pas créer deux applications dans le même AppDomain.

    on peut demander au CLR de creer un seul process, et dedans creer plusieur APPDomain, et je voudrai bien voir comment est gerer la memoire comme cela
    Si j'ai bien compris, la mémoire est partagée (car ce n'est toujours qu'un seul process), mais le CLR s'assure qu'aucun AppDomain ne touche à la mémoire du voisin.
    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.

  7. #7
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Médinoc
    Si j'ai bien compris, la mémoire est partagée (car ce n'est toujours qu'un seul process), mais le CLR s'assure qu'aucun AppDomain ne touche à la mémoire du voisin.
    et donc la difference entre AppDomain est Thread, ce n'est pas de le partage memoire, car les thread aussi partagent la memoire
    Merci Medinoc
    je crois que j'ai bien compris la difference entre la CRT heap, managed et le stack

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

Discussions similaires

  1. la difference entre les deux code
    Par infoelectronique dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/07/2008, 08h08
  2. difference entre les distributions
    Par dev0077 dans le forum Distributions
    Réponses: 1
    Dernier message: 09/10/2007, 19h34
  3. Réponses: 5
    Dernier message: 26/09/2006, 23h04
  4. difference entre les 3 versions de xmi
    Par nabdoun dans le forum Outils
    Réponses: 1
    Dernier message: 16/01/2006, 15h50
  5. difference entre les edi
    Par Trust_ dans le forum Débats sur le développement - Le Best Of
    Réponses: 44
    Dernier message: 02/06/2004, 19h18

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