2011-01-03 9 views
11

मैं सी ++ में 8 साल से डी सीख रहा हूं। मेरा सवाल डी कचरा संग्रह के संबंध में है - मैं कब हटाता हूं, और जब मुझे आवश्यकता नहीं होती है?डी में कब हटाना है?

+2

कचरा संग्रहण का मतलब यह नहीं है कि आपको बिल्कुल 'हटाने' की आवश्यकता नहीं है? – delnan

उत्तर

14

आप नहीं करते हैं। हटाएं डी संस्करण 2 के साथ उपयोग नहीं किया जाना चाहिए और भाषा से हटाया जाना है। क्या पकड़ है, मुझे यकीन नहीं है। इसके बजाय आप एक फ़ंक्शन, destroy (ऑब्जेक्ट) का उपयोग करते हैं, जो विनाशक कहता है जहां आप उन संसाधनों को मुक्त कर सकते हैं जो जीसी मेमोरी नहीं हैं। ऑब्जेक्ट्स की जीसी संग्रह के दौरान स्वयं की स्मृति के कारण विनाशक फिर से होगा। यह "The D Programming Language" में समझाया गया है।

विचार जीसी प्रदान करने से पहले संसाधनों को पुनः प्राप्त करना है और स्मृति भ्रष्टाचार को खतरे में डालकर रोकता है। Core.memory मॉड्यूल कम सुरक्षित होने के लिए GC.free (ऑब्जेक्ट) प्रदान करता है जिसे नष्ट करने (ऑब्जेक्ट) को कॉल करने के बाद स्मृति को मुक्त करने के लिए उपयोग किया जा सकता है।

जैसा कि मैं एक सी ++ प्रोग्रामर नहीं हूं, मुझे वास्तव में आरएआईआई पैटर्न नहीं पता है, लेकिन यदि आप जीसी से बचना चाहते हैं तो संदर्भ और संदर्भ गिनती अपेक्षित रणनीति है।

+3

हां। 'स्पष्ट() 'किसी ऑब्जेक्ट के विनाशक को कॉल करने और इसे अमान्य स्थिति में रखने के लिए उपयोग किया जाता है, लेकिन यह अभी भी स्मृति को पुनः प्राप्त करने के लिए जीसी का काम है। 'हटाएं' पूरी तरह से दूर जा रहा है। यदि आप पूरी तरह से स्मृति को प्रबंधित करना चाहते हैं, तो आप 'malloc' और' free' का उपयोग करें। हालांकि, डी कोड में 'स्पष्ट()', 'malloc', और 'free' का उपयोग करके वास्तव में मानक नहीं होना चाहिए। वे उन विशेष मामलों के लिए हैं जहां आपको उनकी आवश्यकता है। –

+2

धन्यवाद जोनाथन, मेरा मतलब यह नहीं था कि इस तरह के पैटर्न का उपयोग करना आम बात होगी। केवल यही है कि यह करने की सुविधा है। जो कॉर्बिन मार्च का बेहतर जवाब देता है क्योंकि सवाल वास्तव में खुद को हटाने के बारे में नहीं था। –

10

डी प्रलेखन में Garbage Collection पर एक नज़र डालें। जैसा कि ध्यान दिया गया है, यह स्मृति को स्पष्ट रूप से प्रबंधित करने के लिए लगभग (लगभग) आवश्यक नहीं है। निश्चित रूप से जीसी की शक्ति को समझाने की कोशिश कर रहे बुलेट बिंदुओं के मुट्ठी भरने के बाद, उनमें कुछ परिदृश्य शामिल हैं जहां कचरा संग्रह कम हो जाता है। इन शॉर्ट-फॉल्स को संबोधित करने के लिए (वे उन्हें बाधा कहते हैं), डिजिटल मंगल Memory Management के लिए सुझाव प्रदान करता है।

यदि संभव हो, तो डी कचरा कलेक्टर अपनी बात करें। स्पष्ट स्मृति प्रबंधन को अनदेखा करें। कुछ बहुत ही विशिष्ट परिदृश्यों में, एक अस्वीकार्य जीसी विराम या स्मृति की संभावना है जिसे पुनः प्राप्त नहीं किया जा सकता है। यदि आपके ऐप में इन परिदृश्यों में से एक (परीक्षण और प्रोफ़ाइल इसे साबित करने के लिए) शामिल है, तो समस्या का कारण अलग करें और आवश्यकतानुसार स्मृति को स्पष्ट रूप से प्रबंधित करें। डी आपको आशावादी के रूप में शुरू करने देता है। अगर चीजें पूरी तरह से काम नहीं करती हैं, तो यह आश्वस्त है कि आप स्पष्ट स्मृति प्रबंधन पर वापस आ सकते हैं।

+0

धन्यवाद - मैं कचरा संग्रह दस्तावेज के माध्यम से देखा था, लेकिन यह मेरे लिए कोई धारणा बनाने के लिए पर्याप्त स्पष्ट महसूस नहीं किया था। – bfops

संबंधित मुद्दे