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

Langage C++ Discussion :

Comment fonctionne le new


Sujet :

Langage C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut Comment fonctionne le new
    Bonjour,
    Question simplissime, je me demande comment fonctionne le new au niveau de l'allocation mémoire d'une classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class A
    {
      public:
        A(){m_iA = 10;};
        int GetA(){return m_iA;};
     
      protected:   
        int m_iA;
    };
    Si je fais
    Quel est l'espace alloué par cette opération? Est-ce simplement sizeof(A);
    Dans ce cas comment est réalisé le lien entre les données d'une classe (ses variable membres) et ses fonctions membres?

    Merci

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    C'est sizeof(A). Pour les fonctions membres non virtuelles, la détermination se fait statiquement, à la compilation. Pour les fonctions membres non virtuelles, sizeof(A) tient compte de la nécessité de pouvoir déterminer dynamiquement le type; ça se fait généralement par l'ajout dans la classe d'un pointeur vers une table comportable entre autres l'adresse des fonctions virtuelles à utiliser.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Merci,

    En fait je suis en train de porter un code VS2008 PC vers une plateforme embarquée avec de la compillation gcc. Je dois sécuriser ce code notemment au niveau des allocations mémoires. Ce code comporte des allocations dynamique de classes. Je voudrais connaître l'empreinte mémoire de ces différentes allocations et j'aimerai également réaliser une sorte de garbage collector pour pouvoir nettoyer la mémoire en cas d'exception.

    Je pensais surcharger l'opérateur new mais je n'avais pas d'idée pour le moment comment connaitre la taille allouée pour ces objets.


    André

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par alen Voir le message
    Je pensais surcharger l'opérateur new mais je n'avais pas d'idée pour le moment comment connaitre la taille allouée pour ces objets.
    La surcharge de new prend de toute façon la taille dont a besoin l'objet. Le compilo se charge pour toi de déterminer celle-ci. Cf ici.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Merci,
    Quand tu dis que le compilo se charge de déterminer la taille, veux tu dire que chaque compilateur organise ses objets comme il l'entend et qu'il n'y a pas de 'standardisation' au niveau du stockage d'un objet en mémoire?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par alen Voir le message
    Merci,
    Quand tu dis que le compilo se charge de déterminer la taille, veux tu dire que chaque compilateur organise ses objets comme il l'entend et qu'il n'y a pas de 'standardisation' au niveau du stockage d'un objet en mémoire?
    Salut,
    Je ne sais pas si la norme impose des contraintes dans l'ordre des champs, mais ce dont je suis sûr c'est que la taille peut varier ne serait-ce qu'à cause des problèmes d'alignements. Certaines architectures peuvent imposer des contraintes pour l'adressage amenant à du padding entre les membres. Donc tu peux avoir sizeof(A)!=sizeof(A) sur 2 plateformes différentes.

Discussions similaires

  1. [JSF] comment fonctionne <h:message> ?
    Par anitshka dans le forum JSF
    Réponses: 5
    Dernier message: 29/06/2005, 17h36
  2. Comment fonctionne TXmlDocumment ????
    Par almisuifre dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/02/2005, 12h54
  3. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10
  4. Comment fonctionne le ClassExplorer ?
    Par borisd dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/09/2004, 17h44
  5. Comment fonctionne le CVS ?
    Par mathieu dans le forum CVS
    Réponses: 6
    Dernier message: 23/03/2004, 11h26

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