Je travaille sur un grand projet C ++. Il consiste en un serveur qui expose une API REST, fournissant une interface simple et conviviale pour un système très large comprenant de nombreux autres serveurs. La base de code est assez grande et complexe, et a évolué au fil du temps sans une conception appropriée au départ. Ma tâche est d'implémenter de nouvelles fonctionnalités et de refactoriser / corriger l'ancien code afin de le rendre plus stable et fiable.
À l'heure actuelle, le serveur crée un certain nombre d'objets à longue durée de vie qui ne sont jamais arrêtés ni éliminés à la fin du processus. Cela rend Valgrind presque inutilisable pour la détection des fuites, car il est impossible de distinguer les milliers de fuites légitimes (douteuses) des fuites "dangereuses".
Mon idée est de veiller à ce que tous les objets soient éliminés avant la résiliation, mais lorsque j'ai fait cette proposition, mes collègues et mon patron m'ont opposé en soulignant que le système d'exploitation allait de toute façon libérer cette mémoire (ce qui est évident pour tout le monde) et en éliminant les objets. va ralentir l'arrêt du serveur (qui, pour le moment, est essentiellement un appel à std::exit
). J'ai répondu que le fait d'avoir une procédure d'arrêt «propre» n'implique pas nécessairement que l'on doit l'utiliser. Nous pouvons toujours appeler std::quick_exit
ou simplement kill -9
le processus si nous nous sentons impatients.
Ils ont répondu "la plupart des démons et processus Linux ne prennent pas la peine de libérer de la mémoire à l'arrêt". Bien que je puisse voir cela, il est également vrai que notre projet nécessite un débogage précis de la mémoire, car j'ai déjà trouvé une corruption de mémoire, des doubles libérations et des variables non initialisées.
Quelles sont vos pensées? Suis-je en train de poursuivre un effort inutile? Sinon, comment puis-je convaincre mes collègues et mon patron? Si oui, pourquoi et que dois-je faire à la place?