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 :

Un ramasse miette en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut Un ramasse miette en C
    Bonjour,

    Je cherche a faire un Garbage Collector en C.

    J'ai choisi Mark and Sweep.

    J'ai compris l'algo, ce n'est pas bien complique, mais j'ai tout de meme certaines difficultees :

    Comment, en recuperant un pointeur, parcourir son arborescence ?

    Et pour le sweep, comment parcourir toute la memoire du processus en cours ?

    Si vous avez de la doc precise sur comment implementer cet algo, ca m'interesse ! Ca en manque cruellement sur internet, pourtant, j'ai du mal a croire que personne ai jamais voulu implementer un garbage collector pour C.


    Merci a vos propositions !

    P.S : excusez l'accentuation, je suis sur clavier qwerty canadien avec configuration US...

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Fused Voir le message
    Ca en manque cruellement sur internet, pourtant, j'ai du mal a croire que personne ai jamais voulu implementer un garbage collector pour C.
    http://www.hpl.hp.com/personal/Hans_Boehm/gc/

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut
    Ok, j'ai rien dit !

    Toujours est-il que je veux faire qq chose de plus petit, seulement du mark and sweep ; voila mon pseudo code pour l'instant, ce qui est en anglais sont les endroits ou je bute pour ecrire en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    void mark_sweep() {
    	// pour chaque racine
    	for each root variable r {
    		mark (r);
    		sweep ();
    	}
    }
     
    void mark (Object p) {
    	// si p n'est pas deja marque
    	if (!p.marked) {
    		p.marked = true;	// on le marque
    		for (each Object q referenced by p) {
    		// et on parcours son arborescence pour faire de meme
    			mark (q);
    		}
    	}
    }
     
    void sweep () {
    	// parcours du tas
    	for each Object p in the heap {
    		if (p.marked) {
    			// si il etait marque, on le demarque
    			p.marked = false;
    		}
    		else {
    			// sinon on efface
    			heap.release (p);
    		}
    	}
    }
    Neamoins je conserve ton lien, ca me servira surement plus tard

  4. #4
    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
    je crois que tu ne peux pas parcourir l'arborescence de l'objet dans avoir des informations de type: Typiquement, son nombre de variables, et lesquelles parmi ces variables sont des types références.
    Tu peux gagner de la performance en décidant "toi-même" (cad, à la place de l'utilisateur) de la structure en mémoire des objets: Par exemple, mettre toujours les types références avant les types valeur, comme ça les seules informations de type dont tu as besoin sur un objet, c'est le nombre de variables de types références qu'il contient...
    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.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    je crois que tu ne peux pas parcourir l'arborescence de l'objet dans avoir des informations de type: Typiquement, son nombre de variables, et lesquelles parmi ces variables sont des types références.
    Tu peux gagner de la performance en décidant "toi-même" (cad, à la place de l'utilisateur) de la structure en mémoire des objets: Par exemple, mettre toujours les types références avant les types valeur, comme ça les seules informations de type dont tu as besoin sur un objet, c'est le nombre de variables de types références qu'il contient...
    Oui, en effet, en bidouillant je me suis arrangé, je savais quels types d'objets j'ai à manipuler ici en l'occurence, je ne fais pas un Mark&Sweep générique.

    Ca me donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    mark_sweep()={   Racines R=Racines;
    		 while(R!=NULL) {mark(R->objet); R=R->next;}
    		 sweep();
    		 if (space_freed<BORNE) printf("abort");}
     
    mark(val_t *N)={if (N.v.markbit=0) {N.v.markbit=1;
    		 Racines P=Children(N);
    		 while(P!=NULL) {mark(P->objet); P=P->next;}}
    		}
    int spaced_freed=0;
    int insert_into_pool(val_t *node) {space_freed=space_freed+sizeof(node);}
     
    sweep()={int N=allocbuf;
    	 while(N<allocbuf+ALLOCSIZE){
    		if(N.v.markbit=0){free(N);
    				  insert_into_pool(N);}
    		else N.v.markbit=0;}
    	 N=N+sizeof(val_t); }
    Beau bordel, mais ça à l'air de marcher !

    Citation Envoyé par Emmanuel Delahaye Voir le message
    [troll=ON]
    Ca sert à quoi un ramasse-miette ? C'est pour les fainéants qui ne savent pas programmer ?
    [/troll]
    C'est la première fois que je vois un admin d'un gros forum venir critiquer d'une manière si puérile et sans motif...

    Je pense que tu sais à quoi sert un ramasse miettes.
    Je suppose donc que tu n'utilises aucun langage où la gestion de la mémoire est automatique puisque c'est pour des fainéants qui ne savent pas programmer ?

    D'ailleurs, je ne fais pas ça par plaisir, et loin de là, c'est pour un cours sur la gestion de mémoire. Il faut bien apprendre non ?

    Et pour finir, oui, ça arrive qu'il y ai des gens qui ne savent pas bien programmer et qui n'en on vraiment rien à faire de comment la mémoire de leur programme s'alloue et se désaloue.

    A bon entendeur...

  6. #6
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    salut,

    Citation Envoyé par Fused Voir le message
    C'est la première fois que je vois un admin d'un gros forum venir critiquer d'une manière si puérile et sans motif...
    Il n'est pas admin. Et il a anticipé ta réponse en utilisant le mode troll.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Fused Voir le message
    Je cherche a faire un Garbage Collector en C.
    [troll=ON]
    Ca sert à quoi un ramasse-miette ? C'est pour les fainéants qui ne savent pas programmer ?
    [/troll]

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    [troll=ON]
    Ca sert à quoi un ramasse-miette ? C'est pour les fainéants qui ne savent pas programmer ?
    [/troll]
    Pour une fois, je suis d'accord !

    Mais bon, en l'occurence, il essaie d'en coder lui-même, en s'étant penché sur un algorithme. 'faut déja avoir envie de se retrousser les manches.

Discussions similaires

  1. Windev possède t'il un ramasse-miette ?
    Par DavidleVrai dans le forum WebDev
    Réponses: 1
    Dernier message: 28/06/2012, 16h58
  2. Comment prévoir le passage du ramasse miettes ?
    Par montis dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 11/04/2012, 11h55
  3. Optimiser le ramasse miettes
    Par ToTo13 dans le forum Général Java
    Réponses: 6
    Dernier message: 11/06/2011, 21h58
  4. ramasse miette en langage c
    Par baylamat dans le forum C
    Réponses: 6
    Dernier message: 16/12/2006, 18h39

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