Saya sedang mengerjakan proyek C ++ besar. Ini terdiri dari server yang memaparkan REST API, menyediakan antarmuka yang sederhana dan ramah pengguna untuk sistem yang sangat luas yang terdiri dari banyak server lain. Basis kode cukup besar dan kompleks, dan berkembang melalui waktu tanpa desain awal yang tepat. Tugas saya adalah mengimplementasikan fitur-fitur baru dan memperbaiki / memperbaiki kode lama agar lebih stabil dan dapat diandalkan.
Saat ini, server membuat sejumlah objek berumur panjang yang tidak pernah dihentikan atau dibuang ketika proses berakhir. Ini membuat Valgrind hampir tidak dapat digunakan untuk deteksi kebocoran, karena tidak mungkin untuk membedakan antara ribuan (yang diragukan) kebocoran yang sah dari yang "berbahaya".
Ide saya adalah untuk memastikan bahwa semua objek dibuang sebelum pemutusan, tetapi ketika saya membuat proposal ini, kolega saya dan bos saya menentang saya menunjukkan bahwa OS akan membebaskan memori itu (yang jelas bagi semua orang) dan membuang benda-benda akan memperlambat shutdown server (yang, pada saat ini, pada dasarnya adalah panggilan ke std::exit
). Saya menjawab bahwa memiliki prosedur mematikan "bersih" tidak selalu berarti bahwa seseorang harus menggunakannya. Kita selalu bisa menelepon std::quick_exit
atau hanya kill -9
proses jika kita merasa tidak sabar.
Mereka menjawab "kebanyakan daemon dan proses Linux tidak perlu repot membebaskan memori pada saat shutdown". Walaupun saya dapat melihat itu, juga benar bahwa proyek kami memang membutuhkan debugging memori yang akurat, karena saya sudah menemukan korupsi memori, membebaskan dua kali lipat dan variabel yang tidak diinisialisasi.
Apa yang kamu pikirkan? Apakah saya melakukan upaya sia-sia? Jika tidak, bagaimana saya bisa meyakinkan kolega dan bos saya? Jika ya, mengapa, dan apa yang harus saya lakukan?