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 :

garbage collector, compteur de reference


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut garbage collector, compteur de reference
    Bonsoir a tous,

    donc voila, j'ai une application que j'ai porte de java en c++ qui marche plutot bien. Elle utilise des compteurs de reference un peu partout.
    Malheuresement elle contient des fuites memoires a cause de references cycliques. Mon object graph est tres complexe, m empechant d utliser des weak references
    Apparement il faut utiliser un garbage collector mark&sweep pour regler ce probleme mais je n'y comprend pas grand chose, entre autre a cause de ces roots, ... Cela demande des connaissances sur la memoire virtuelle, les registres, les segments, ...
    C'est un peu violent pour moi.
    J'ai trouvé un code c, un conservative gc, il creer une root a partir de la stack, puis scanne la stack et recherche des pointeurs.
    Comment cela peut-il marcher puisque la stack peut etre corrompue a tout moment.
    Je cherche un truc simple remplacant le refcounting.
    Merci de votre aide

  2. #2
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Je connais pas trop le sujet, mais je dirai que tu as 2 solutions : Repenser le design ou te tourner vers boost ou TR1 smart pointer...

    PS : a moins d'y être vraiment obligé, le "Garbage Collector" en c++ c'est... assez moyen je trouve.

  3. #3
    Membre Expert
    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
    Par défaut
    Mon object graph est tres complexe, m empechant d utliser des weak references
    Ton problème, ce n'est pas la complexité de l'objet graph, mais l'absence de responsabilité. Tu ne sais pas qui est responsable de la durée de vie de tes objets (classique dans un programme java, en C++ ça ne pardonne pas).

    Commence par définir qui est responsable de tes objets, après, tu sauras où utiliser des weak_ptr. Eventuellement, si tu peux nous en dire un peu plus sur la structure de ton graphe (j'imagine qu'il est cyclique et orienté, au vu de tes problèmes).

    PS : a moins d'y être vraiment obligé, le "Garbage Collector" en c++ c'est... assez moyen je trouve.
    "C++ is the best garbage collected language, because it produces very little garbage" (Stroustrup, de mémoire). Bon, c'est un peu de la provoc cela dit, parce que destructeurs et garbage collectors ne font pas très bon ménage. Il y a du boulot à faire de ce côté.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Une autre possibilité: boost::graph
    Tu auras une classe graphe toute prête, bien pensée et optimisée, ainsi que les principaux algorithmes (A*, etc.).

  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
    Par défaut
    parce que destructeurs et garbage collectors ne font pas très bon ménage. Il y a du boulot à faire de ce côté.
    Il n'y a pas vraiment de boulot à faire, les cycles et les destructeurs sont des choses incompatibles car dans le cas d'un cycle il n'est pas possible d'appeler les destructeurs dans un ordre qui satisfasse que les membres de chaque classe ne soient pas détruits quand on en appelle son destructeur.
    C'est pour moi une preuve supplémentaire que les cycles c'est plus un problème lié à une mauvaise conception qu'autre chose...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 91
    Par défaut
    En fait, j'ai porté un code existant en java, bien sur le codeur ne se soucie guere du design, car java est bien plus simple, il suffit de se fier a la JVM qui est un peu plus intelligente que moi et arrive a gerer ces references cycliques.
    Il m'a dit que(il bosse avec moi) que c'est impossible d'enlever ces references cycliques et auto-references.
    Il s'agit d'une JavaScript compilé machine virtuelle. Grosso modo tu compiles un .js en un .cjs puis tu execute ce cjs avec mon code.
    Un peu comme le projet SpiderMonkey qui lui utilise un GC.
    En fait une fonction contient un prototype, qui lui contient la fonction, ....
    Pour des raisons internes on veut pas utiliser spidermonkey, et on peux pas redisigner l'application, je doit faire avec.
    L'objet graph est tellement complexe que casser manuellement les references cycliques est trop compliqué.
    C'est certainement la meme raison qui fait que spidermonkey n'utilise pas le refcounting.
    Je m'oriente donc vers un GC, et aurait aimé savoir si ca va pas me flinguer les performances.
    Aussi j'ai trouvé un GC mark&sweep en c++, mais cela depend trop de la plateforme, localisation des objets en memoire, registres, stack, memoire virtuelle, ...
    Je doit faire tourner mon programme sur Win32,WinMobile, Symbian, Mac et iPhone.
    Des conseils seraient les bienvenus
    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JVM] Java 5 et Garbage Collector(Parralèle)
    Par ssaunois dans le forum Général Java
    Réponses: 6
    Dernier message: 28/11/2005, 23h42
  2. [JVM]Garbage collector
    Par godik dans le forum Général Java
    Réponses: 5
    Dernier message: 07/10/2005, 09h12
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

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