Büyük bir C ++ projesi üzerinde çalışıyorum. Diğer birçok sunucuyu içeren çok geniş bir sistem için basit ve kullanıcı dostu bir arayüz sağlayan bir REST API'si sunan bir sunucudan oluşur. Kod tabanı oldukça büyük ve karmaşıktır ve uygun bir tasarım olmadan zaman içinde gelişmiştir. Görevim yeni özellikleri uygulamak ve eski kodu daha kararlı ve güvenilir hale getirmek için yeniden düzenleme / düzeltme yapmaktır.
Şu anda sunucu, işlem sona erdiğinde hiçbir zaman sonlandırılmayan veya atılmayan bir dizi uzun ömürlü nesne oluşturur. Bu, Valgrind'i kaçak tespiti için neredeyse kullanılamaz hale getirir, çünkü binlerce (şüpheli) meşru kaçağı "tehlikeli" olanlardan ayırt etmek imkansızdır.
Benim fikrim fesih öncesinde tüm nesnelerin atılmasını sağlamaktır, ancak bu teklifi yaptığımda, meslektaşlarım ve patronum, işletim sisteminin bu hafızayı yine de serbest bırakacağına (nesneleri herkesin görebileceğine) işaret etti ve nesneleri bıraktı sunucunun kapanmasını yavaşlatır (şu anda temelde bir çağrıdır std::exit
). Ben bir "temiz" kapatma prosedürü olması mutlaka bunu kullanmak gerektiğini ima etmedi. Sabırsız hissedersek her zaman arayabiliriz std::quick_exit
ya da sadece kill -9
süreci.
"Linux cinlerinin ve süreçlerinin çoğu kapanırken bellekte yer açmak zahmetine girmiyor" diye cevapladılar. Bunu görebiliyorum, ancak bellek bozulması, çift serbest bırakmalar ve başlatılmamış değişkenler bulduğumdan, projemizin doğru bellek hata ayıklamasına ihtiyacı olduğu da doğru.
Düşüncelerin nelerdir? Anlamsız bir çaba peşinde miyim? Değilse, meslektaşlarımı ve patronumu nasıl ikna edebilirim? Öyleyse, neden ve bunun yerine ne yapmalıyım?