अगर मैंने प्रोग्राम किया है - बिना यह जाने - एक मेमोरी लीक, और एप्लिकेशन समाप्त हो गया है, तो क्या लीक हुई मेमोरी मुक्त हो गई है?
अगर मैंने प्रोग्राम किया है - बिना यह जाने - एक मेमोरी लीक, और एप्लिकेशन समाप्त हो गया है, तो क्या लीक हुई मेमोरी मुक्त हो गई है?
जवाबों:
हां, एक "मेमोरी लीक" बस एक ऐसी मेमोरी है जो अब एक प्रक्रिया का संदर्भ नहीं है, और इस तरह अब मुक्त नहीं हो सकती है। ओएस अभी भी एक प्रक्रिया को आवंटित सभी मेमोरी का ट्रैक रखता है, और जब यह प्रक्रिया समाप्त हो जाती है तो इसे मुक्त कर देगा।
अधिकांश मामलों में ओएस मेमोरी को मुक्त कर देगा - जैसा कि विंडोज, लिनक्स, सोलारिस, आदि के सामान्य "जायके" के साथ होता है, हालांकि यह ध्यान रखना महत्वपूर्ण है कि विशेष वातावरण में जैसे कि विभिन्न रियल-टाइम ऑपरेटिंग सिस्टम। कार्यक्रम समाप्त होने पर स्मृति को मुक्त नहीं किया जा सकता है।
आपके प्रोग्राम को निष्पादित करने वाला ओएस आमतौर पर ऐसी मेमोरी को क्लीनअप करता है जिसे स्पष्ट रूप से मुक्त नहीं किया गया है और जो हैंडल स्पष्ट रूप से बंद नहीं है, लेकिन यह सी ++ मानक द्वारा गारंटी नहीं है। आपको कुछ एम्बेडेड डिवाइस मिल सकते हैं जो आपकी मेमोरी लीक से मुक्त नहीं करते हैं।
कहा जा रहा है कि विंडोज और लिनक्स के सभी डिस्ट्रोस जो मैंने कभी देखा है, मेमोरी लीक से मुक्त है।
आप आसानी से मेमोरी लीक का एक विशाल लूप बना सकते हैं, हालांकि इसे स्वयं परखने के लिए। अपने रैम के उपयोग को बढ़ता हुआ देखें और फिर अपना प्रोग्राम बंद करें। आप देखेंगे कि रैम का उपयोग नीचे चला जाता है।
C ++ का उपयोग करते समय एक और विचार यह है कि यदि आप अपनी ढेर आवंटित स्मृति को नहीं हटा रहे हैं तो आपके विध्वंसक भी नहीं कहे जा रहे हैं। यदि आपके विध्वंसक नहीं कहे जाते हैं तो कभी-कभी आपके अन्य दुष्प्रभाव भी होंगे।
आमतौर पर, हाँ। कुछ सिस्टम साझा मेमोरी ब्लॉक जैसी चीजों का समर्थन करते हैं जो प्रोग्राम से बाहर निकलने पर स्वचालित रूप से मुक्त नहीं होते हैं। अधिकांश अभी भी एक संदर्भ गणना रखते हैं और इसे हटा देते हैं जब सभी प्रोग्राम जो इसे बाहर निकलते हैं, लेकिन कुछ नहीं करते हैं (उदाहरण के लिए, 16-बिट विंडोज में कुछ प्रकार के आइटम थे जो तब भी आवंटित किए जाते रहेंगे, जब उन्हें संदर्भित नहीं किया जाता है - हालांकि यह आमतौर पर अन्य कारणों के लिए दुर्घटनाग्रस्त हो गया इससे पहले कि यह एक समस्या का कारण बन जाए ...)
इस बात पर निर्भर करता है कि आपने कौन सी मेमोरी लीक की है। कुछ मेमोरी OS द्वारा पुनः प्राप्त नहीं की जा सकती हैं। जब प्रक्रिया समाप्त हो जाती है तो अधिकांश OSes पर अधिकांश मेमोरी स्वचालित रूप से पुनः प्राप्त हो जाएगी।