क्या यह प्रोग्रामर के हिस्से पर स्मृति को गतिशील रूप से आवंटित और अस्वीकृत करने के मूल गलतफहमी के कारण है? क्या यह प्रसन्नता के कारण है?मेमोरी लीक क्यों आम हैं?
उत्तर
नहीं। यह प्रत्येक स्मृति आवंटन का ट्रैक रखने के लिए बहुत अधिक लेखांकन के कारण होता है। स्मृति आवंटित करने के लिए कौन जिम्मेदार है? इसे मुक्त करने के लिए कौन जिम्मेदार है? यह सुनिश्चित करना कि आप स्मृति को आवंटित करने और मुक्त करने के लिए एक ही एपीआई का उपयोग करते हैं ... सुनिश्चित करें कि आप हर संभव प्रोग्राम प्रवाह को पकड़ें और हर स्थिति में साफ करें (उदाहरण के लिए, सुनिश्चित करें कि आप त्रुटि या अपवाद को पकड़ने के बाद साफ हो जाएं)। सूची जारी है ...
+1 अच्छी तरह से कहा, यह एक _hard_ समस्या –
+1 Ditto है। यही वह सब कुछ है जो मैं कहना चाहता था और अधिक। मुझे सिर्फ अनियंत्रित एपीआई के लोगों से प्यार है, मुझे उम्मीद है कि मुझे स्मृति आवंटन के कुछ डिवीजनिंग गुरु होने की उम्मीद है। – wheaties
@ जॉन - क्या मुझे आपकी टिप्पणी में जोर देने के लिए बचपन में माना जाता है? – ChaosPandion
एक सभ्य आकार की परियोजना में, कोई आवंटित संसाधनों का ट्रैक खो सकता है।
कभी-कभी एक फ़ंक्शन को एक प्रारंभिक डेटा संरचना की अपेक्षा की जाती है जो इनपुट के रूप में शुरू होती है। कोई डेटा संरचना में गुजरता है जो पहले से ही शुरू हुआ है, और इस प्रकार पहले आवंटित स्मृति लीक हो गई है।
मेमोरी लीक मूल गलतफहमी के कारण होते हैं प्रत्येक बग है। और मैं किसी को भी हर बार पहली बार बग फ्री कोड लिखने के लिए चौंक गया होगा। मेमोरी लीक बस उस प्रकार की बग होने लगती है जो शायद ही कभी दुर्घटना या स्पष्ट रूप से गलत व्यवहार का कारण बनती है (ज़ाहिर है कि बहुत अधिक मेमोरी का उपयोग करने के अलावा), इसलिए जब तक डेवलपर के लिए मेमोरी लीक का स्पष्ट रूप से परीक्षण नहीं किया जाता है, तो शायद यह कभी नहीं पता कि वे मौजूद हैं। यह देखते हुए कि कोडबेस में परिवर्तन हमेशा बग जोड़ते हैं, और मेमोरी लीक वर्चुअल अदृश्य होते हैं, मेमोरी लीक प्रोग्राम की उम्र के रूप में विस्तारित होते हैं और आकार में फैलते हैं।
यहां तक कि स्वचालित मेमोरी प्रबंधन वाली भाषाओं में भी, कचरा संग्रह एल्गोरिदम के आधार पर स्मृति को चक्रीय संदर्भों के कारण लीक किया जा सकता है।
मुझे लगता है कि यह नौकरी में काम करने के दबावों के कारण है जिसके लिए मृत रेखाएं और ऊपरी प्रबंधन की आवश्यकता होती है ताकि परियोजना को दरवाजा बाहर निकाला जा सके। तो आप परीक्षण कर सकते हैं, परीक्षण के साथ, क्यू & ए, ऐसे दबाव वाले वातावरण में पीयर कोड समीक्षा, कि मेमोरी लीक नेट के माध्यम से फिसल सकता है।
चूंकि आपके प्रश्न में भाषा का उल्लेख नहीं किया गया है, इसलिए, स्वचालित मेमोरी प्रबंधन है जो मेमोरी एकाउंटिंग/ट्रैकिंग का ख्याल रखता है ताकि कोई मेमोरी लीक न हो, जावा/.NET सोचें, लेकिन कुछ नेट के माध्यम से फिसल सकते हैं। यह सी/सी ++ की पसंद के साथ होता था जो malloc
/new
फ़ंक्शंस का उपयोग करता है, और स्मृति आवंटित होने की तीव्र मात्रा के कारण, हमेशा जांचना कठिन होता है।
फिर फिर, उन लीक को ट्रैक करना मुश्किल हो सकता है जो इस उत्तर में एक और वक्रबॉल फेंक रहा है - यह है कि यह देव की मशीन पर काम करता है जो यह प्रदर्शित नहीं होता है, लेकिन जब उत्पादन में, स्मृति शुरू होती है नरक की तरह लीक करना, क्या यह कॉन्फ़िगरेशन, हार्डवेयर, सॉफ़्टवेयर कॉन्फ़िगरेशन या इससे भी बदतर है, स्मृति रिसाव यादृच्छिक स्थिति में दिखाई दे सकती है जो उत्पादन वातावरण के भीतर अद्वितीय है, या यह समय/लागत बाधा है जो स्मृति रिसाव होने की अनुमति देती है या क्या यह है कि स्मृति प्रोफाइलिंग उपकरण लागत निषिद्ध हैं या देव टीम को लीक को ट्रैक करने में मदद करने के लिए धन की कमी है ...
सभी में, प्रत्येक और प्रत्येक देव टीम के भीतर, कोड की काम सुनिश्चित करने के लिए अपनी ज़िम्मेदारी है , और स्मृति प्रबंधन के बारे में नियमों को जानना (उदाहरण के लिए, इस तरह के हर malloc
के लिए के रूप में वहाँ एक free
होना चाहिए, के लिए हर new
होना चाहिए एक delete
), लेकिन कोई दोष देव टीम के लिए खुद को जिम्मेदार होना चाहिए, न तो है 'देव टीम पर दबाव डालने' के लिए प्रबंधन में ओर इशारा करते हुए उंगली।
दिन के अंत में, यह केवल देव टीम पर भरोसा करने और उनके कंधों पर 'प्रसन्नता' रखने के लिए झूठी अर्थव्यवस्था होगी।
उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।
मेमोरी लीक बस बग हैं। प्रोग्रामर के रूप में आपके ऊपर दबाव आपको अधिक गलतियां कर सकता है (यह मेरे साथ होता है), लेकिन बिना किसी दबाव के, आपको अभी भी लीक मिल जाएगी। यह सिर्फ एक मुश्किल समस्या है। –
कीड़े।
यहां तक कि बग के बिना, यह जानना असंभव हो सकता है कि कार्य को स्मृति को रद्द करना चाहिए। कोड संरचना संरचना अनिवार्य रूप से कार्यात्मक है (मुख्य कार्य उप-फ़ंक्शंस को कॉल करता है, जो डेटा को संसाधित करता है, फिर परिणाम देता है), लेकिन यह बहुत छोटा नहीं है यदि कई ट्रेड (या कई अलग-अलग ऑब्जेक्ट) स्मृति का एक टुकड़ा साझा करते हैं तो यह छोटा नहीं है। स्मार्ट पॉइंटर्स का उपयोग किया जा सकता है (सी ++ में), लेकिन अन्यथा यह कम या ज्यादा असंभव है।
लीक्स सबसे खराब प्रकार की बग नहीं हैं। उनका प्रभाव आम तौर पर प्रदर्शन में एक संचयी गिरावट है (जब तक आप स्मृति से बाहर नहीं हो जाते), इसलिए वे केवल प्राथमिकता के रूप में उच्च नहीं हैं।
संरचित स्कॉप्स की कमी और आवंटित स्मृति के स्पष्ट स्वामित्व।
- 1. आम मेमोरी
- 2. मेमोरी लीक
- 3. मेमोरी मेमोरी लीक इश्यू
- 4. मेमोरी लीक
- 5. मेमोरी लीक
- 6. मेमोरी लीक
- 7. यह मेमोरी लीक (आईफोन) क्यों बनाता है?
- 8. JAXBContext.new इंस्टेंस मेमोरी लीक
- 9. पायथन: मेमोरी लीक डीबगिंग
- 10. एंड्रॉइड मेमोरी लीक पॉइंट स्पष्ट नहीं हैं!
- 11. AVAudioPlayer मेमोरी लीक
- 12. माइक्रोसॉफ्ट.Web.Administration मेमोरी लीक
- 13. माइक्रोसॉफ्ट.एफएसएचआरपी.कंट्रोल.मेलबॉक्स में मेमोरी लीक?
- 14. ओपनएसएसएल :: एसएसएल_library_init() मेमोरी लीक
- 15. यूनिट परीक्षण मेमोरी लीक
- 16. रेल 3.0.7 मेमोरी लीक
- 17. चेकड लिस्टबॉक्स मेमोरी लीक
- 18. स्टोरीबोर्ड segues मेमोरी लीक
- 19. एनएससीएफस्ट्रिंग मेमोरी लीक
- 20. एसबीजेसन - मेमोरी लीक है?
- 21. एआरसी मेमोरी लीक
- 22. जावा मेमोरी लीक
- 23. संभावित मेमोरी लीक?
- 24. नॉकआउट जेएस मेमोरी लीक
- 25. एंबेडेड आयरनपीथन मेमोरी लीक
- 26. अप्रबंधित मेमोरी लीक
- 27. पर्ल सबस्ट्र मेमोरी लीक
- 28. पायथन मेमोरी लीक?
- 29. एंड्रॉइड ड्रायबल्स मेमोरी लीक
- 30. डब्ल्यूपीएफ मेमोरी लीक
व्यक्तिगत रूप से, मुझे लगता है कि यह 40% अज्ञानता, 40% लापरवाही, और 20% आलस्य है। – ChaosPandion
मानव होने के नाते ... – bryantsai