Tôi đang làm việc trên một dự án C ++ lớn. Nó bao gồm một máy chủ hiển thị API REST, cung cấp giao diện đơn giản và thân thiện với người dùng cho một hệ thống rất rộng bao gồm nhiều máy chủ khác. Codebase khá lớn và phức tạp, và phát triển theo thời gian mà không có một thiết kế phù hợp. Nhiệm vụ của tôi là triển khai các tính năng mới và cấu trúc lại / sửa mã cũ để làm cho nó ổn định và đáng tin cậy hơn.
Hiện tại, máy chủ tạo ra một số đối tượng sống lâu không bao giờ bị chấm dứt cũng không được xử lý khi quá trình kết thúc. Điều này làm cho Valgrind gần như không thể sử dụng để phát hiện rò rỉ, vì không thể phân biệt giữa hàng ngàn rò rỉ hợp pháp (nghi vấn) với những rò rỉ "nguy hiểm".
Ý tưởng của tôi là đảm bảo rằng tất cả các đối tượng đều được xử lý trước khi chấm dứt, nhưng khi tôi đưa ra đề xuất này, các đồng nghiệp và sếp của tôi đã phản đối tôi chỉ ra rằng hệ điều hành sẽ giải phóng bộ nhớ đó (điều hiển nhiên đối với mọi người) và xử lý các đối tượng sẽ làm chậm quá trình tắt máy chủ (lúc này, về cơ bản là một cuộc gọi đến std::exit
). Tôi đã trả lời rằng có một quy trình tắt "sạch" không nhất thiết có nghĩa là người ta phải sử dụng nó. Chúng tôi luôn có thể gọi std::quick_exit
hoặc chỉ kill -9
là quá trình nếu chúng tôi cảm thấy thiếu kiên nhẫn.
Họ trả lời "hầu hết các trình nền và quy trình Linux không bận tâm giải phóng bộ nhớ khi tắt máy". Mặc dù tôi có thể thấy điều đó, nhưng cũng đúng là dự án của chúng tôi cần gỡ lỗi bộ nhớ chính xác, vì tôi đã thấy hỏng bộ nhớ, giải phóng gấp đôi và các biến chưa được khởi tạo.
Quan điểm của bạn là gì? Tôi đang theo đuổi một nỗ lực vô nghĩa? Nếu không, làm thế nào tôi có thể thuyết phục đồng nghiệp và sếp của tôi? Nếu vậy, tại sao, và tôi nên làm gì thay thế?