इस एक विषय पर मेरी स्वाभाविक रूप से हठधर्मिता में, किसी भी पुस्तकालय में कम से कम भौतिक लीक के लिए कोई बहाना नहीं है जिसका उद्देश्य व्यापक रूप से लागू होना है। इसलिए मैं GTK + डेवलपर्स को तब तक बग करना चाहूंगा जब तक वे इसे स्वयं ठीक नहीं कर लेते।
यह पुस्तकालय के लिए पर्याप्त है कि atexit
वह कम से कम अनलोड किए जाने पर आवंटित किसी भी मेमोरी को मुक्त करने के लिए कॉलबैक रजिस्टर करे । यदि यह नपुंसकता के आवंटन के खर्च से बचना चाहता है, तो यह उन्हें पहली जगह में नहीं करना चाहिए।
यहां तक कि सबसे आलसी कार्यक्रम जो सिर्फ एक बार में स्मृति के नन्हे मुन्नों का बोटलोड करना चाहता है, एक सीधा अनुक्रमिक आबंटक का उपयोग कर सकता है, जो बंद होने पर सभी मेमोरी को शुद्ध करता है। यदि आवंटनकर्ता भी संरेखण से निपटना नहीं चाहता है, तो यह प्रत्येक एकल चंक को पूल कर सकता है जो अधिकतम संरेखण सीमाओं के लिए पूल करता है। यदि यह व्यक्तिगत रूप से स्मृति के उन सभी नन्हे मुन्नों को मुक्त न करके तेजी से बंद होने वाले समय के साथ लाभान्वित करने में सक्षम था, तो यह एक ऐसे अनुक्रमिक आवंटनकर्ता का उपयोग करके तुच्छ प्रयास के लिए सममित रूप से एक महान सौदे को लाभ देने के लिए खड़ा है, जो एक सीधे अनुक्रमिक फैशन में स्मृति को पूल करता है। की तुलना में बहुत तेजी से आवंटनmalloc
और अधिक कैश-फ्रेंडली मेमोरी पैटर्न, जब पुस्तकालय किया जाता है, तो आवंटनकर्ता द्वारा जमा किए गए सन्निहित मेमोरी के सभी बड़े ब्लॉक को केवल। सभी लाइब्रेरी को तब करना पड़ता है जब उनकी malloc
कॉल को बदल दिया जाता है, जिसके लिए वे किसी free
चीज़ से परेशान नहीं होते हैं seq_malloc
, और अनलोड होने पर आवंटित सभी मेमोरी को फ्री करने के लिए कॉलबैक seq_purge
में कॉल atexit
करते हैं।
अन्यथा आपको यह नॉटी लाइब्रेरी आपके मैमोरी लीक डिटेक्शन टूल में संदेशों को अव्यवस्थित करके मिल गई है जिसे अब आपको फ़िल्टर करना है। इससे भी बदतर, यदि आप उन्हें व्यवस्थित रूप से फ़िल्टर नहीं करते हैं, तो वे आपके स्वयं के अनुप्रयोग में लीक को अस्पष्ट कर सकते हैं और आपके सहकर्मियों को उन्हें अनदेखा करने की आदत विकसित हो सकती है, आपकी अपनी टीम को रोकने में पहले स्थान पर रिसाव का पता लगाने वाले उपकरणों की उपयोगिता कम हो सकती है। धकेलने वाला कोड। यह स्थूल और बदसूरत है और सबसे ज्यादा मुझे इस बात के पक्ष में तर्क नहीं मिलता कि यह जानबूझकर किया गया है कि ऊपर दिए गए समाधान का उपयोग करना कितना तुच्छ है।
तार्किक लीक (अधिक जटिल प्रकार जो कचरा संग्रह से भी रक्षा नहीं कर सकता है) एक अधिक जटिल मुद्दा है, और वहां मुझे अल्पकालिक कार्यक्रमों के लिए तार्किक लीक होने के लिए कुछ औचित्य मिल सकता है, क्योंकि वे उस सभी मेमोरी को शुद्ध करते हैं जो उन्होंने आवंटित की थी शटडाउन के बाद से इसे तार्किक लीक से बचने के लिए संसाधन प्रबंधन के बारे में बहुत अधिक विचार करने की आवश्यकता है (जीसी है जो भाषाओं में अधिक है)। लेकिन मुझे शारीरिक लीक से बचने के लिए कोई उचित बहाना नहीं मिल रहा है, यह देखते हुए कि वे सबसे आलसी संदर्भों में भी कैसे बचते हैं।
वैसे भी, कम से कम मैं वेलग्रिंड में लीक को फ़िल्टर कर दूंगा ताकि वे कम से कम आपकी टीम की अपनी क्षमता के साथ खिलवाड़ न करें।