2010-10-02 10 views
3

J'écris un langage statiquement compilé et je voudrais soutenir la récupération de place. avant de le concevoir je voudrais savoir comment je devrais en déduire quand le GC devrait fonctionner?Comment devrais-je en déduire quand le GC devrait fonctionner?

Devrait-il être après chaque intervalle d'allocation de 16 Mo? (vérifier après assez de hausses ou juste avant d'allouer 16 + mb). Y at-il un cas à vérifier ealier afin que les boucles puissent réutiliser la même mémoire pour être efficace?

Répondre

2

Le meilleur moment pour l'exécution d'un GC est propablement "quand le programme a encore du temps". Par exemple, si vous avez une boucle d'exécution et qu'aucun événement n'est mis en file d'attente, il est peut-être temps d'exécuter le GC. Et peut-être aussi si l'allocateur du GC remarque qu'il aurait besoin de demander plus de mémoire au système d'exploitation. Je pense que cela dépend aussi de la conception du GC, par ex. Il est possible de concevoir un GC fonctionnant dans son propre thread et n'interrompant pas le programme par rapport aux GC habituels "stop the world".

La question est également, voulez-vous mettre en œuvre un GC juste pour l'apprentissage? Ou voulez-vous juste un GC? Dans le dernier cas, je vous suggère de regarder dans le GC Boehm.

+0

"quand le programme a encore du temps" ressemble à un sommeil et à un verrouillage de mutex. J'aime que vous avez mentionné Boehm GC. Je publie actuellement du code C++ et l'ajout de ceci semble trivial. Je demandais à la fois l'apprentissage et je voulais juste un GC. Je n'avais pas envie d'en écrire un ou je me souciais de sa qualité, mais je veux savoir comment ça fonctionne. Je peux voir que le temps a mal tourné s'il y a des tonnes de petites allocations qui prendraient du temps à trier. –