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 :

Gestion mémoire des données statiques


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Gestion mémoire des données statiques
    Hello,

    La littérature nous incite fortement à utiliser des pointeurs intelligents pour gérer les allocations mémoire, afin de s'assurer que cette mémoire est libérée en cas de plantage, grâce ua mécanisme de suppression des objets.

    Mais que se passe-t-il quand des classes ayant demandé ces allocations mémoire sont en statique ?

  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
    Alors elles ne sont détruites qu'à la fin du process, en supposant que cette fin ne soit pas due à un plantage.
    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 émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Mais comme le principal intérêt des pointeurs intelligents est de gérer la mémoire en cas de plantage, ils perdent alors grandement leur intérêt, non ?

  4. #4
    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
    Citation Envoyé par oodini Voir le message
    La littérature nous incite fortement à utiliser des pointeurs intelligents pour gérer les allocations mémoire,
    Oui.

    afin de s'assurer que cette mémoire est libérée en cas de plantage,
    Non. Soit tu confonds exception et plantage, soit tu n'as pas compris. Et les exceptions ne sont pas la seule raison pour laquelle les pointeurs intelligents sont une bonne idee.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Il ne faut pas confondre exception et plantage.

    Les pointeurs intelligents te garantissent la libération mémoire en cas d'exceptions (en fait, en cas de remontée de la pile). En cas de plantage pur et dur, personne ne te garantit quoi que ce soit.
    ----
    edit : zut, grillé

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Soit tu confonds exception et plantage, soit tu n'as pas compris. Et les exceptions ne sont pas la seule raison pour laquelle les pointeurs intelligents sont une bonne idee.
    Disons que j'ai fait un raccourci entre exception et plantage, car un plantage occasionne souvent une exception. Enfin, je crois. :-)

  7. #7
    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
    Ben non. Si ça plante, ça ne peut pas être AVANT l'exception, puisque ça voudrait dire qu'il se passe encore quelque chose APRÈS le plantage...
    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.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    OK. Ma définition de plantage était moins rigoureuse que la votre.

    En tout cas, merci d'avoir répondu à ma question initiale.

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    OK. Ma définition de plantage était moins rigoureuse que la votre.
    Je crois que c'est ce qui arrive quand on vient de langages comme csharp ou java, ou tout finit par se transformer en exception, et où de toute manière on n'a pas de notion de durée de vie des objets.

    En C++, un plantage, c'est un crash de l'application et nettoyage par le système. Une exception, ça remonte la pile, et ça se traduit par un plantage si elle n'est pas attrapée, après remontée de la pile et donc, exécution de tous les destructeurs.

    Quand tu fais du RAII (donc, quand tu fais du C++ ), la différence est fondamentale.

  10. #10
    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
    Par contre, certaines erreurs peuvent se traduire par un plantage sans causer d'exception C++ entretemps. Notamment, une exception Win32 comme une Access Violation, ou une division par zéro.

    Note: Selon les options du compilateur Visual C++, les exceptions Win32 peuvent ou non fonctionner de pair avec les exceptions C++, et appeler les destructeurs lors de la remontée de la pile. Mais ça n'est pas le cas avec les réglages par défaut.
    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
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Je croyais qu'une division par 0 générait une exception...

  12. #12
    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
    Il n'y a pas d'exception C++ pour Division par Zéro.
    Par contre, il y a des exceptions matérielles, qui sous Windows sont traitées par le kernel et envoyées au processus sous forme d'exceptions Win32.
    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.

Discussions similaires

  1. gestion des données statiques / performance
    Par citizen_walker dans le forum JPA
    Réponses: 1
    Dernier message: 17/03/2008, 17h14
  2. Gestion statistique des données
    Par saydreek dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/01/2008, 13h10
  3. [XML] Des données statiques
    Par buchir dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/07/2007, 16h19
  4. Gestion Historique des données dans une table
    Par popof60 dans le forum Access
    Réponses: 3
    Dernier message: 16/02/2007, 15h56
  5. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34

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