큰 C ++ 프로젝트를 진행 중입니다. REST API를 노출하는 서버로 구성되어 다른 많은 서버로 구성된 매우 광범위한 시스템을위한 단순하고 사용자 친화적 인 인터페이스를 제공합니다. 코드베이스는 상당히 크고 복잡하며 적절한 디자인을하지 않고도 시간이 지남에 따라 발전했습니다. 내 임무는 더 안정적이고 신뢰할 수 있도록 새로운 기능을 구현하고 이전 코드를 리팩터링 / 수정하는 것입니다.
현재 서버는 프로세스가 종료 될 때 종료되거나 폐기되지 않는 많은 수명이 긴 객체를 만듭니다. 이로 인해 Valgrind는 "위험한"누수로부터 수천 건의 (정상적으로) 합법적 인 누수를 구별하는 것이 불가능하기 때문에 누수 감지에 거의 사용할 수 없게됩니다.
내 생각은 모든 객체가 종료되기 전에 폐기되도록하는 것이지만,이 제안을 할 때 동료와 상사는 OS가 그 메모리를 어쨌든 (모든 사람에게 분명하게) 해제하고 객체를 폐기 할 것이라고 지적했습니다. 서버의 종료 속도가 느려집니다 (현재는 기본적으로에 대한 호출입니다 std::exit
). "깨끗한"종료 절차가 반드시이를 사용해야한다는 것을 의미하지는 않습니다. 우리가 참을성이 없다고 느끼면 언제든지 전화 std::quick_exit
하거나 kill -9
프로세스를 진행할 수 있습니다.
"대부분의 Linux 데몬과 프로세스는 종료시 메모리 확보를 방해하지 않습니다"라고 대답했습니다. 내가 알 수 있지만 이미 메모리 손상, 이중 해제 및 초기화되지 않은 변수를 발견 했으므로 프로젝트에 정확한 메모리 디버깅이 필요하다는 것도 사실입니다.
당신의 생각은 무엇입니까? 나는 무의미한 노력을 추구하고 있습니까? 그렇지 않다면 어떻게 동료와 상사를 설득 할 수 있습니까? 그렇다면 왜, 어떻게해야합니까?