कई उत्तर एक स्टैक ओवरफ्लो ब्राउज़ करने के बाद, यह स्पष्ट है कि कुछ मूल रूप से संकलित भाषाओं में कचरा संग्रह है । लेकिन यह मेरे लिए स्पष्ट नहीं है कि यह वास्तव में कैसे काम करेगा।
मैं समझता हूं कि एक स्पष्ट भाषा के साथ कचरा संग्रह कैसे काम कर सकता है। कचरा संग्रहकर्ता दुभाषिया के साथ बस चलाएगा और प्रोग्राम की मेमोरी से अप्रयुक्त और अगम्य वस्तुओं को हटा देगा। वे दोनों साथ-साथ चल रहे हैं।
हालांकि संकलित भाषाओं के साथ यह कैसे काम करेगा? मेरी समझ यह है कि एक बार संकलक ने स्रोत कोड को लक्ष्य कोड - विशेष रूप से देशी मशीन कोड - में संकलित किया है। इसका काम समाप्त हो गया है। तो कैसे संकलित कार्यक्रम कचरा एकत्र किया जा सकता है?
क्या कम्पाइलर किसी तरह से सीपीयू के साथ काम करता है जबकि "कचरा" ऑब्जेक्ट को हटाने के लिए प्रोग्राम निष्पादित किया जाता है? या संकलक प्रोग्राम के निष्पादन योग्य में कुछ न्यूनतम कचरा कलेक्टर शामिल करता है।
मेरा मानना है कि स्टैक ओवरफ्लो पर इस उत्तर से इस अंश के कारण मेरे बाद के बयान में पूर्व की तुलना में अधिक वैधता होगी :
ऐसी ही एक प्रोग्रामिंग लैंग्वेज है एफिल। अधिकांश एफिल कम्पाइलर पोर्टेबिलिटी कारणों के लिए सी कोड उत्पन्न करते हैं। यह C कोड मानक C कंपाइलर द्वारा मशीन कोड का उत्पादन करने के लिए उपयोग किया जाता है। एफिल कार्यान्वयन इस संकलित कोड के लिए जीसी (और कभी-कभी सटीक जीसी) भी प्रदान करता है, और वीएम की कोई आवश्यकता नहीं है। विशेष रूप से, VisualEiffel संकलक ने पूर्ण जीसी समर्थन के साथ सीधे देशी x86 मशीन कोड उत्पन्न किया ।
अंतिम कथन का अर्थ यह प्रतीत होता है कि संकलक में अंतिम निष्पादक में कुछ कार्यक्रम शामिल है जो कचरा संग्राहक के रूप में कार्य करता है जबकि कार्यक्रम चल रहा है।
कचरा संग्रह के बारे में डी भाषा की वेबसाइट पर पेज - जो मूल रूप से संकलित है और इसमें एक वैकल्पिक कचरा संग्रहकर्ता है - यह भी संकेत देता है कि कचरा संग्रह को लागू करने के लिए कुछ पृष्ठभूमि कार्यक्रम मूल निष्पादन कार्यक्रम के साथ चलता है।
D एक सिस्टम प्रोग्रामिंग लैंग्वेज है जिसमें कचरा संग्रहण के लिए समर्थन है। आमतौर पर स्मृति को स्पष्ट रूप से मुक्त करना आवश्यक नहीं है। बस आवश्यकतानुसार आवंटित करें, और कचरा संग्रहकर्ता समय-समय पर सभी अप्रयुक्त मेमोरी को उपलब्ध मेमोरी के पूल में वापस कर देगा।
यदि ऊपर वर्णित विधि का उपयोग किया जाता है, तो यह वास्तव में कैसे काम करेगा? संकलक कुछ कचरा संग्रह कार्यक्रम की एक प्रति संग्रहीत करता है और इसे प्रत्येक निष्पादन योग्य में पेस्ट करता है जो इसे उत्पन्न करता है?
या मैं अपनी सोच में दोषपूर्ण हूं? यदि हां, तो संकलित भाषाओं के लिए कचरा संग्रह को लागू करने के लिए किन तरीकों का उपयोग किया जाता है और वे वास्तव में कैसे काम करेंगे?
malloc()
।