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 :

mémoire allouée ?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut mémoire allouée ?
    Bonjour,

    je jongle avec les allocations mémoire : malloc, free et autres realloc.

    Ma question est : "soit un pointeur donné, est il possible de savoir si les cases mémoire qu'il pointe sont allouées ... et si c'est le cas, combien d'octets sont alloués ?"

    Merci d'avance,
    Yéyé

  2. #2
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    je jongle avec les allocations mémoire : malloc, free et autres realloc.
    As-tu songé à utiliser des pointeur inteligeant ? Comme std::auto_ptr<TypePointé> dans <memory> de la stl ou alors boost::scoped_ptr et boost::shared_ptr ?
    ça simplifie telement la vie et c'est beaucoup moins dangereux :o

    Ma question est : "soit un pointeur donné, est il possible de savoir si les cases mémoire qu'il pointe sont allouées ... et si c'est le cas, combien d'octets sont alloués ?"
    Je ne pense pas... En tout cas, si c'est le cas j'aimerai bien le savoir pour ma culture personnelle
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Je ne pense pas non plus qu'on puisse le savoir facilement.
    +1 pour les smart pointers.

  4. #4
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut
    Pourquoi tu n'alloue pas tes emplacements avec new?
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    je jongle avec les allocations mémoire : malloc, free et autres realloc.
    Il ne faut pas utiliser ces fonctions en C++.

    Ma question est : "soit un pointeur donné, est il possible de savoir si les cases mémoire qu'il pointe sont allouées ... et si c'est le cas, combien d'octets sont alloués ?"
    Utilise std::vector.
    De façon générale, les pointeurs sont à éviter en C++.
    Boost ftw

  6. #6
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Je ne vois pas le rapport entre les std::vector et les pointeurs.....
    Mais sinon, c'est vrai qu'on est en C++, il faut utiliser de préférence new plutôt que les 'vieux' free, malloc etc.... C'est bien pour le C ça....
    Et c'est vrai aussi que les smart_pointeur facilitent grandement la vie :
    Disparition de plein de try catch dans les constructeurs, plus de delete.... Enfin c'est le rêve quoi....
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Rafy
    Je ne vois pas le rapport entre les std::vector et les pointeurs.....
    vecteur == abstraction RAII de tableau dynamique, chose que l'on référence en C via des pointeurs.
    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
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut Re: mémoire allouée ?
    Citation Envoyé par _yeye_
    Ma question est : "soit un pointeur donné, est il possible de savoir si les cases mémoire qu'il pointe sont allouées ... et si c'est le cas, combien d'octets sont alloués ?"
    Même si c'est possible avec des fonctions spécifiques de ton compilateur, on peut se demander si c'est judicieux de s'en servir. Pourquoi as-tu ce besoin ?

  9. #9
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Regarde du côté de std::auto_ptr, tu n'auras pas à te soucier de cela. Le seul détail, si je me rappelle bien, est qu'il ne peut y avoir 2 auto_ptr qui pointe sur la même référence mémoire, car les auto_ptr fonctionnent selon le "ownership".

  10. #10
    Membre actif Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par loufoque
    De façon générale, les pointeurs sont à éviter en C++.
    Je suis le seul à pas être d'accord?
    .:: WOTC_MasterMind | Never Surrender | Warriors of The Cross ::.
    Il n'y a qu'une façon d'échouer, c'est d'abandonner avant d'avoir réussi.

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par Mast3rMind
    Citation Envoyé par loufoque
    De façon générale, les pointeurs sont à éviter en C++.
    Je suis le seul à pas être d'accord?
    Je pense qu'il veut dire dans le cas des tableaux.

    Sinon,il est evident que les pointeurs sont un outil trés puissant;parfois presque essentiel.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Mast3rMind
    Citation Envoyé par loufoque
    De façon générale, les pointeurs sont à éviter en C++.
    Je suis le seul à pas être d'accord?
    Avec l'expérience, on a tendance à éviter les pointeurs bruts responsables de données (leur durée de vie, ...) dans le code applicatif, pour le cantoner au coeur de bibliothèques critiques.
    Cela évite de pourrir le code de try-catch.
    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...

  13. #13
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut
    Pourquoi vous mettez std::vecteur ou std::auto_ptr pourquoi mettre le std devant?
    Si on met using namespace std; on peut faire abstraction des std placés devant vecteur et auto_ptr non?
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Oui mais il ne faut pas en abuser (dans les .h par exemple).
    http://c.developpez.com/faq/cpp/?pag...sing_namespace

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par benjiprog
    Pourquoi vous mettez std::vecteur ou std::auto_ptr pourquoi mettre le std devant?
    Parce que sur les forums, il n'y a plus de doutes possibles quant à l'origine de l'dentifiant que suit le std::. Et de plus, comme ça, ceux qui sont restés au C++ d'avant 98, sont graduellement mis à jour en découvrant la notion d'espace de noms.
    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...

  16. #16
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    De plus, dans tes classes les std:: ont l'avantage d'avoir la certitude que ce que tu utilise apres le std:: est bien celui de la librairie standard.

    En gros ca limite de beaucoup le risque de conflit d'identifiant.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    oula, j'etais en déplacement hier et je vois que ma question a suscité de nombreuses réactions

    Bon, en gros j'ai une fonction qui doit retourner un résultat dans un char*.
    Je voulais donc tester dans ma fonction si ma variable-résultat ètait bien allouée avant l'appel de fonction.

    Bon, je vais jeter un coup d'oeil à auto_ptr.
    En tout cas, merci pour vos réponses et réactions.

    Yéyé

  18. #18
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Tu veux dire, une fonction comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void fct( char*& szOut )
    { strcpy( szOut, "tagada" ); }
    Je partage les points de vue "C++ sécuritaire" exprimés plus haut dans ce fil. Notons tout de même que si szOut n'a pas été initialisé d'une manière ou d'une autre, le plantage est garanti. Passer par un std::auto_ptr peut résoudre le problème, s'il a été initialisé. Sinon, le pointeur interne vaut NULL par défaut, ce qui est facilement contrôlable.

    Une solution plus élégante (pour du char*) serait d'utiliser les std::string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void fct( std::string& szOut )
    { szOut = "tagada"; }

  19. #19
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Bon, en gros j'ai une fonction qui doit retourner un résultat dans un char*.
    Retourne un std::string.
    Boost ftw

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/11/2006, 01h02
  2. Quelle est la taille de la mémoire allouée à la JVM ?
    Par emie31 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/11/2006, 21h42
  3. Réponses: 5
    Dernier message: 08/11/2006, 11h41
  4. Libérer la mémoire allouée à un objet
    Par boudou dans le forum Langage
    Réponses: 6
    Dernier message: 21/02/2006, 22h25
  5. [JVM & tomcat] Modifier la mémoire allouée
    Par sylvain_neus dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 22/06/2004, 09h13

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