Bu konuda itirafla dogmatik düşünceme göre, en azından yaygın olarak uygulanabilir olmayı amaçlayan herhangi bir kütüphanede fiziksel sızıntı için mazeret yoktur. Bu yüzden, GTK + geliştiricilerini kendileri düzeltene kadar bozmaya çalıştım.
Bir kütüphanenin, atexit
en azından boşaltıldığında tahsis ettiği belleği boşaltması için geri çağrıları kaydetmesi yeterince önemsizdir . Eğer ufak ufacık tahsisatın bir yükünün masrafından kaçınmak istiyorsa, onları ilk etapta yapmamalıdır.
Bir kerede ufacık hafıza yığınlarını bir kerede tahsis etmek isteyen en tembel program bile, kapanıştaki tüm belleği temizleyen basit bir sıralı ayırıcı kullanabilir. Eğer ayırıcı hizalama ile uğraşmak istemiyorsa, sadece topladığı her parçayı maksimum hizalama sınırlarına kadar doldurabilir. Tüm bu ufacık bellek parçalarını ayrı ayrı serbest bırakmadan daha hızlı kapanma sürelerinden faydalanabiliyorsa, hafızayı düz sıralı bir şekilde havuzlayan böyle sıralı bir ayırıcı kullanarak önemsiz çaba karşılığında simetrik olarak büyük bir fayda sağlamak anlamına gelir. daha hızlı tahsislermalloc
ve daha fazla önbellek dostu bellek desenleri, sadece kütüphane tamamlandığında ayırıcı tarafından birleştirilen tüm büyük bellek bloklarının serbest bırakılması. Tüm kitaplığın yapması gereken, malloc
uğraşmadıkları çağrılarını free
benzer bir şeyle değiştirmektir seq_malloc
ve boşaltıldığında ayrılan tüm belleği boşaltmak için seq_purge
bir atexit
geri çağrıyı çağırır .
Aksi takdirde, şimdi filtrelemek zorunda bellek sızıntısı algılama araçları mesajlar dağınıklık bu kötü kütüphane var. Daha da kötüsü, sistematik olarak filtrelemezseniz, kendi uygulamanızdaki sızıntıları gizleyebilirler ve meslektaşlarınız onları gözden geçirme alışkanlığını geliştirebilir, kaçak tespit araçlarının ilk olarak kendi takımınızın sızdıran kod. Bu iğrenç ve çirkin ve en önemlisi yukarıdaki çözümü kullanmanın ne kadar önemsiz olduğu göz önüne alındığında, bunu kasıtlı olarak zorlayıcı yapmak için lehte argümanlar bulamıyorum.
Mantıksal sızıntılar (çöp toplamanın bile koruyamayacağı daha karmaşık bir tür) daha karmaşık bir konudur ve orada, kısa ömürlü programların, tahsis ettikleri tüm belleği temizledikleri sürece mantıksal sızıntılara sahip oldukları için bazı gerekçeler bulabilirim. mantıksal sızıntıları önlemek için kaynak yönetimi hakkında büyük bir düşünce gerektirdiğinden (muhtemelen GC olan dillerde daha fazla). Ancak en tembel bağlamlarda bile kaçınmanın ne kadar önemsiz olduğu göz önüne alındığında, fiziksel sızıntılardan kaçınmak için makul bir bahane bulamıyorum.
Her neyse, en azından valgrind'deki sızıntıları filtreledim, böylece en azından ekibinizin kendi tespit etme yeteneğinizle uğraşmamaları.