আমি একটি বড় সি ++ প্রকল্পে কাজ করছি। এটি এমন একটি সার্ভারে অন্তর্ভুক্ত যা একটি REST API উন্মুক্ত করে, অন্য অনেকগুলি সার্ভারের সমন্বয়ে খুব বিস্তৃত সিস্টেমের জন্য একটি সহজ এবং ব্যবহারকারী-বান্ধব ইন্টারফেস সরবরাহ করে। কোডবেসটি বেশ বড় এবং জটিল এবং যথাযথ ডিজাইনের সামনে না রেখে সময়ের সাথে বিকশিত হয়েছে। আমার কাজটি হ'ল নতুন বৈশিষ্ট্যগুলি প্রয়োগ করা এবং এটিকে আরও স্থিতিশীল এবং নির্ভরযোগ্য করার জন্য পুরানো কোডটি রিফ্যাক্টর / ঠিক করা।
এই মুহুর্তে, সার্ভারটি প্রচুর দীর্ঘজীবী অবজেক্ট তৈরি করে যা প্রক্রিয়াটি শেষ হয়ে গেলে কখনও শেষ হয় না বা নিষ্পত্তি হয় না। এটি ভালগ্রিন্ডকে ফাঁস সনাক্তকরণের জন্য প্রায় অকেজো করে তোলে, কারণ "বিপজ্জনক" থেকে হাজার হাজার (প্রশ্নোত্তর) বৈধ লিকের মধ্যে পার্থক্য করা অসম্ভব।
আমার ধারণা হ'ল সমাপ্তির আগে সমস্ত বস্তু নিষ্পত্তি করা হয়েছে তা নিশ্চিত করা, কিন্তু যখন আমি এই প্রস্তাবটি তৈরি করি তখন আমার সহকর্মীরা এবং আমার বস আমাকে বিরোধিতা করে বলেছিলেন যে ওএস যেভাবেই সেই স্মৃতি মুক্ত করতে চলেছে (যা সবার কাছে স্পষ্ট) এবং অবজেক্টগুলি নিষ্পত্তি করে দিচ্ছে সার্ভারের শাটডাউনটি ধীর করবে (যা এই মুহূর্তে মূলত একটি কল std::exit
) আমি জবাব দিয়েছি যে "ক্লিন" শাটডাউন পদ্ধতি থাকার কারণে এটি অবশ্যই ব্যবহার করা উচিত নয়। আমরা অধৈর্য বোধ করলে আমরা সবসময় কল করতে পারি std::quick_exit
বা কেবল kill -9
প্রক্রিয়াটি করতে পারি।
তারা জবাব দিয়েছিল "বেশিরভাগ লিনাক্স ডিমন এবং প্রক্রিয়াগুলি শাটডাউনে মেমরি মুক্ত করতে বিরত হয় না"। আমি এটি দেখতে পাচ্ছি, এটি সত্য যে আমাদের প্রকল্পের সঠিক মেমরি ডিবাগিংয়ের দরকার নেই, কারণ আমি ইতিমধ্যে মেমরির দুর্নীতি, ডাবল ফ্রি এবং অবিচ্ছিন্ন ভেরিয়েবলগুলি পেয়েছি।
আপনার চিন্তা কি? আমি কি অর্থহীন প্রচেষ্টা অনুসরণ করছি? যদি তা না হয় তবে আমি কীভাবে আমার সহকর্মীদের এবং আমার মনিবকে বোঝাতে পারি? যদি তা হয় তবে কেন এবং এর পরিবর্তে আমার কী করা উচিত?