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

MFC Discussion :

Comment connaître l'empreinte mémoire d'une structure de données


Sujet :

MFC

  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 connaître l'empreinte mémoire d'une structure de données
    Bonjour,

    Je pense avoir déja vu un post sur le sujet, mais pas moyen de le retrouver.
    Je charge une 'base de données' constituée de classes C++. La mémoire pour chacune de ces classes est allouée avec l'opérateur new. J'aurai aimé connaître la place totale utilisée en mémoire par cette 'base de données'.

    Avez-vous une idée?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    À part surcharger l'opérateur new pour en faire une fonction qui compte la mémoire allouée (et déduit la mémoire libérée), je ne vois pas trop...
    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é
    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
    J'ai essayé en allouant de la mémoire avant et après le chargement de la base. J'obtient deux pointeurs p1 et p2 est ce que la difference entre ces deux pointeurs n'est pas +- représentative de l'espace nécessaire pour la DB?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 116
    Points
    116
    Par défaut
    Je suis pas certain à 100% mais je pense que l'allocation de la mémoire n'est pas linéaire.
    En fait la RAM est plus ou moins fragmenté du coup rien ne garantie que si tu alloues un pointeur p1 sur 10 octets et ensuite p2 sur xx octets, tu puisses atteindre p2 en faisant p1+10+n.
    J'espère que ma réponse est assez claire.

  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
    Oui merci,
    Je constate en effet que d'une execution à l'autre le résultat n'est pas le même.
    Comment pourrais-je surcharger l'opérateur "new" pour qu'il me retourne l'espace alloué?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    L'opérateur "sizeof" ne fonctionne pas dans votre cas ?

  7. #7
    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
    Hélas non,
    Ce sont des objets complex (des classes avec héritage multiple) et certains de ces objets font de l'allocation dynamique.

    Merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    La version Debug des MFC redéfinit la fonction "new" pour installer un tracker mémoire.
    Tu peux t'en inspirer pour faire tes propres besoin.

  9. #9
    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,

    Sans vouloir abuser sais-tu ou je peux trouver le code de ce DEBUG_NEW

    Merci

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Si tu as MFC, alors tu as les sources avec.
    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.

  11. #11
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 366
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 366
    Points : 20 402
    Points
    20 402
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    À part surcharger l'opérateur new pour en faire une fonction qui compte la mémoire allouée (et déduit la mémoire libérée), je ne vois pas trop...
    oui et non parce que l'OS va déplacer ou non des blocs de mémoire donc c'est difficile de connaitre précisément l'adresse de l'instance d'une classe sauf en le demandant à un instant précis.


    Il faut peut-être trouver une autre alternative à new et utiliser les API win32 spécifiques d'allocation mémoire

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Mat.M, ôtes moi d'un doute, on n'est pas managé et Windows implémente bien la mémoire virtuelle grâce aux CPU Intel, non ?
    Mat.M devrait un peu dormir, il fait un peu de surmenage, LOL.

    Si c'est juste pour du débugging :
    MFC
    http://msdn.microsoft.com/en-us/libr...64(VS.80).aspx
    C RUNTIME
    http://msdn.microsoft.com/en-us/libr...44(VS.80).aspx

    Normalement, c'est dans les sources. Mais pour correctement tracker l'utilisation mémoire, il faut connaître le mode de création des objets.
    Quand tu parles de classes C++ et de nes, c'est dans un environnement MFC ?

    Pour le code source, regarde l'implémentation des operateurs new et delete dans afxmem.cpp de ton VS.

  13. #13
    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
    Citation Envoyé par bacelar Voir le message
    Mais pour correctement tracker l'utilisation mémoire, il faut connaître le mode de création des objets.
    Quand tu parles de classes C++ et de nes, c'est dans un environnement MFC ?

    Pour le code source, regarde l'implémentation des operateurs new et delete dans afxmem.cpp de ton VS.
    Oui je travaille avec les MFC, j'ai bien trouvé l'opérateur new dans afxmem.cpp, je vais essayé de creuser de ce côté Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2012, 09h06
  2. Réponses: 2
    Dernier message: 19/02/2007, 15h46
  3. Comment créer une structure de donnée dynamiquement ?
    Par Beaunico dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 09h34
  4. Réponses: 11
    Dernier message: 13/01/2006, 15h30
  5. Réponses: 3
    Dernier message: 28/06/2005, 09h07

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