En mi opinión ciertamente dogmática sobre este tema, no hay excusas para las fugas físicas, al menos en cualquier biblioteca que pretenda ser ampliamente aplicable. Así que buscaría molestar a los desarrolladores de GTK + hasta que lo arreglen ellos mismos.
Es lo suficientemente trivial como para que una biblioteca registre atexit
devoluciones de llamada para liberar cualquier memoria que asigne al menos al descargarla. Si quiere evitar el gasto de un montón de asignaciones pequeñas, no debería estar haciéndolas en primer lugar.
Incluso el programa más perezoso que solo quiere asignar una gran cantidad de pequeños fragmentos de memoria a la vez podría usar un asignador secuencial directo que simplemente purga toda la memoria en el apagado. Si el asignador ni siquiera quiere lidiar con la alineación, puede rellenar cada fragmento que agrupa a los límites máximos de alineación. Si pudo beneficiarse con tiempos de apagado más rápidos al no liberar todos esos pequeños fragmentos de memoria individualmente, también se beneficiaría mucho simétricamente a cambio de un esfuerzo trivial al usar un asignador secuencial que agrupa la memoria de forma secuencial directa con asignaciones mucho más rápidas quemalloc
y patrones de memoria más amigables con la caché, solo para tener todos los grandes bloques de memoria contigua agrupados por el asignador liberados cuando se termina la biblioteca. Todo lo que la biblioteca tiene que hacer es reemplazar sus malloc
llamadas por las cuales no se molestan free
con algo como seq_malloc
, y llamar seq_purge
en una atexit
devolución de llamada para liberar toda la memoria asignada al descargarla.
De lo contrario, obtendrá esta desagradable biblioteca abarrotando los mensajes en sus herramientas de detección de pérdida de memoria que ahora tiene que filtrar. Peor aún, si no los filtra sistemáticamente, podrían ocultar las fugas en su propia aplicación y sus colegas podrían desarrollar el hábito de pasarlas por alto, reduciendo la utilidad de las herramientas de detección de fugas en primer lugar para evitar que su propio equipo empujando código con fugas. Es asqueroso y feo y, sobre todo, no creo que los argumentos a favor de hacer esto deliberadamente sean convincentes, dado lo trivial que es usar la solución anterior.
Las fugas lógicas (el tipo más complejo que incluso la recolección de basura no puede proteger) son un problema más complejo, y allí podría encontrar alguna justificación para que los programas de corta duración tengan fugas lógicas siempre que purguen toda la memoria que asignaron en apagado, ya que requiere una gran reflexión sobre la gestión de recursos para evitar fugas lógicas (posiblemente más en lenguajes que tienen GC). Pero no encuentro ninguna excusa razonable para evitar fugas físicas dado lo triviales que son para evitar incluso en los contextos más flojos.
De todos modos, al menos filtraría las filtraciones en valgrind para que al menos no interfieran con la capacidad de su equipo para detectar la suya.