Ich arbeite an einem großen C ++ - Projekt. Es besteht aus einem Server, der eine REST-API verfügbar macht und eine einfache und benutzerfreundliche Oberfläche für ein sehr breites System bietet, das viele andere Server umfasst. Die Codebasis ist ziemlich groß und komplex und hat sich im Laufe der Zeit ohne ein angemessenes Design im Voraus entwickelt. Meine Aufgabe ist es, neue Funktionen zu implementieren und den alten Code zu überarbeiten / zu reparieren, um ihn stabiler und zuverlässiger zu machen.
Derzeit erstellt der Server eine Reihe langlebiger Objekte, die beim Beenden des Prozesses weder beendet noch entsorgt werden. Dies macht Valgrind für die Lecksuche fast unbrauchbar, da es unmöglich ist, zwischen den Tausenden (fragwürdig) legitimen Lecks und den "gefährlichen" zu unterscheiden.
Meine Idee ist es, sicherzustellen, dass alle Objekte vor der Kündigung entsorgt werden. Als ich diesen Vorschlag machte, lehnten meine Kollegen und mein Chef mich ab und wiesen darauf hin, dass das Betriebssystem diesen Speicher sowieso freigeben wird (was für alle offensichtlich ist) und die Objekte entsorgen verlangsamt das Herunterfahren des Servers (was im Moment im Grunde ein Aufruf an ist std::exit
). Ich antwortete, dass ein "sauberes" Herunterfahren nicht unbedingt bedeutet, dass man es verwenden muss. Wir können immer anrufen std::quick_exit
oder nur kill -9
den Prozess, wenn wir uns ungeduldig fühlen.
Sie antworteten: "Die meisten Linux-Daemons und -Prozesse machen sich beim Herunterfahren nicht die Mühe, Speicherplatz freizugeben." Ich kann das zwar sehen, aber es stimmt auch, dass unser Projekt ein genaues Speicher-Debugging benötigt, da ich bereits Speicherbeschädigungen, doppelte Freigaben und nicht initialisierte Variablen gefunden habe.
Was sind deine Gedanken? Verfolge ich ein sinnloses Unterfangen? Wenn nicht, wie kann ich meine Kollegen und meinen Chef überzeugen? Wenn ja, warum und was soll ich stattdessen tun?