Я работаю над большим проектом C ++. Он состоит из сервера, который предоставляет REST API, предоставляя простой и удобный интерфейс для очень широкой системы, включающей множество других серверов. Кодовая база довольно большая и сложная, и развивалась во времени без надлежащего предварительного проектирования. Моя задача - реализовать новые функции и реорганизовать / исправить старый код, чтобы сделать его более стабильным и надежным.
На данный момент сервер создает ряд долгоживущих объектов, которые никогда не завершаются и не удаляются при завершении процесса. Это делает Valgrind практически непригодным для обнаружения утечек, поскольку невозможно отличить тысячи (сомнительно) законных утечек от «опасных».
Моя идея состоит в том, чтобы обеспечить удаление всех объектов до завершения, но когда я сделал это предложение, мои коллеги и мой начальник выступили против того, чтобы я указал, что ОС все равно освободит эту память (что очевидно для всех), и избавился от объектов замедлит выключение сервера (что на данный момент является в основном вызовом std::exit
). Я ответил, что «чистая» процедура выключения не обязательно означает, что ее нужно использовать. Мы всегда можем позвонить std::quick_exit
или просто kill -9
процесс, если мы чувствуем нетерпение.
Они ответили: «Большинство демонов и процессов Linux не беспокоятся об освобождении памяти при завершении работы». Хотя я вижу это, верно и то, что нашему проекту действительно нужна точная отладка памяти, поскольку я уже обнаружил повреждение памяти, двойное освобождение и неинициализированные переменные.
Что ты думаешь? Я преследую бессмысленные усилия? Если нет, то как я могу убедить моих коллег и моего начальника? Если так, почему и что я должен делать вместо этого?