À mon avis, certes dogmatique sur ce seul sujet, il n'y a aucune excuse pour les fuites physiques au moins dans une bibliothèque qui vise à être largement applicable. Je chercherais donc à bug les développeurs GTK + jusqu'à ce qu'ils le corrigent eux-mêmes.
Il est assez trivial pour une bibliothèque d'enregistrer des atexit
rappels pour libérer la mémoire qu'elle alloue au moins lors du déchargement. S'il veut éviter les frais d'une cargaison d'allocations minuscules, il ne devrait pas les faire en premier lieu.
Même le programme le plus paresseux qui veut simplement allouer une cargaison de petits morceaux de mémoire à la fois pourrait utiliser un allocateur séquentiel simple qui purge simplement toute la mémoire à l'arrêt. Si l'allocateur ne veut même pas s'occuper de l'alignement, il peut simplement remplir chaque bloc qu'il regroupe aux limites d'alignement maximales. S'il a pu bénéficier de temps d'arrêt plus rapides en ne libérant pas tous ces petits morceaux de mémoire individuellement, il bénéficierait également de manière symétrique en échange d'efforts triviaux en utilisant un tel allocateur séquentiel qui regroupe la mémoire de manière séquentielle droite avec allocations beaucoup plus rapides quemalloc
et des modèles de mémoire plus conviviaux pour le cache, uniquement pour que tous les gros blocs de mémoire contiguë mis en commun par l'allocateur soient libérés lorsque la bibliothèque est terminée. Tout ce que la bibliothèque doit faire est alors de remplacer leurs malloc
appels pour lesquels ils ne se soucient pas free
de quelque chose comme seq_malloc
, et d'appeler seq_purge
un atexit
rappel pour libérer toute la mémoire allouée lors du déchargement.
Sinon, vous avez cette méchante bibliothèque encombrant les messages dans vos outils de détection de fuite de mémoire que vous devez maintenant filtrer. Pire, si vous ne les filtrez pas systématiquement, ils pourraient masquer les fuites dans votre propre application et vos collègues pourraient prendre l'habitude de les ignorer, réduisant l'utilité des outils de détection des fuites en premier lieu pour empêcher votre propre équipe de poussant le code qui fuit. C'est dégueulasse et moche et surtout je ne trouve pas que les arguments en faveur de faire cela délibérément soient convaincants étant donné la trivialité d'utiliser la solution ci-dessus.
Les fuites logiques (le type le plus complexe contre lequel même la collecte des ordures ne peut pas protéger) sont un problème plus complexe, et là je pourrais trouver une justification pour que les programmes de courte durée aient des fuites logiques tant qu'ils purgent toute la mémoire allouée sur arrêt car il nécessite une grande réflexion sur la gestion des ressources pour éviter les fuites logiques (sans doute davantage dans les langues qui ont GC). Mais je ne trouve aucune excuse raisonnable pour éviter les fuites physiques étant donné qu'elles sont triviales à éviter même dans les contextes les plus paresseux.
Quoi qu'il en soit, au moins je filtrerais les fuites à Valgrind afin qu'elles ne fassent pas au moins avec la capacité de votre équipe à repérer la vôtre.