大規模なC ++プロジェクトに取り組んでいます。REST APIを公開するサーバーで構成され、他の多くのサーバーで構成される非常に広範なシステムにシンプルでユーザーフレンドリーなインターフェースを提供します。コードベースは非常に大きく複雑であり、適切な設計を事前に行わずに時間をかけて進化しました。私の仕事は、新しいコードを実装し、古いコードをリファクタリング/修正して、より安定して信頼できるようにすることです。
現時点では、サーバーは、プロセスが終了しても終了も破棄もされない、長期間存続するオブジェクトを多数作成します。これにより、Valgrindはリーク検出にほとんど使用できなくなります。何千もの(疑わしい)正当なリークと「危険な」リークを区別することは不可能だからです。
私の考えは、すべてのオブジェクトが終了前に確実に破棄されるようにすることですが、私がこの提案をしたとき、私の同僚と上司は、OSがとにかくそのメモリを解放することを指摘し(誰にとっても明らかです)、オブジェクトを破棄することに反対しましたサーバーのシャットダウンを遅くします(現時点では、これは基本的にへの呼び出しですstd::exit
)。私は、「クリーンな」シャットダウン手順を持っているからといって、それを使用しなければならないということを必ずしも意味しないと答えました。焦りを感じたらいつでも呼んでstd::quick_exit
もいいしkill -9
、ただプロセスを呼んでもいい。
彼らは、「ほとんどのLinuxデーモンとプロセスはシャットダウン時にわざわざメモリを解放しない」と答えました。私はそれを見ることができますが、私はすでにメモリ破損、二重解放、および初期化されていない変数を見つけたので、プロジェクトが正確なメモリデバッグを必要とすることも事実です。
あなたの考えは何ですか?私は無意味な努力を追求していますか?そうでない場合、同僚や上司をどのように説得できますか?もしそうなら、なぜ、そして代わりに私は何をすべきですか?