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