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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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 éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    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 éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    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 confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

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

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    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 526
    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

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 476
    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.

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    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