मेमोरी (और संसाधन लॉक) एक कार्यक्रम के निष्पादन के दौरान निर्धारक बिंदुओं पर ओएस पर वापस आ जाते हैं। एक कार्यक्रम का नियंत्रण प्रवाह अपने आप में यह जानने के लिए पर्याप्त है कि निश्चित रूप से, किसी दिए गए संसाधन को कैसे हटाया जा सकता है। ठीक उसी तरह जैसे कि एक मानव प्रोग्रामर को कैसे पता fclose(file)
होता है कि उसके साथ कार्यक्रम कब किया जाना है।
नियंत्रण प्रवाह निष्पादित होने पर जीसीएस इसे सीधे रन आउट के दौरान लगाकर हल करते हैं। लेकिन नियंत्रण प्रवाह के बारे में सच्चाई का वास्तविक स्रोत स्रोत है। तो सैद्धांतिक रूप से, यह निर्धारित करना संभव होना चाहिए free()
कि स्रोत (या एएसटी) का विश्लेषण करके संकलन से पहले कॉल कहां डालें ।
संदर्भ गिनती इसे लागू करने का एक स्पष्ट तरीका है, लेकिन उन परिस्थितियों का सामना करना आसान है जहां संकेत अभी भी संदर्भित हैं (अभी भी स्कोप में) अभी भी आवश्यकता नहीं है। यह सिर्फ मैन्युअल रूप से उन बिंदुओं के दायरे / संदर्भों का प्रबंधन करने के लिए एक जिम्मेदारी से मैन्युअल रूप से निपटने की जिम्मेदारी को धर्मान्तरित करता है।
ऐसा लगता है कि एक कार्यक्रम लिखना संभव है जो एक कार्यक्रम के स्रोत को पढ़ सकता है और:
- कार्यक्रम के नियंत्रण निष्पादन के सभी क्रमपरिवर्तन की भविष्यवाणी करें --- कार्यक्रम की लाइव निष्पादन देखने के समान सटीकता के लिए
- आवंटित संसाधनों के लिए सभी संदर्भों को ट्रैक करें
- प्रत्येक संदर्भ के लिए, पूरे बाद के नियंत्रण प्रवाह को पीछे हटा दें ताकि यह पता चल सके कि संदर्भ की गारंटी कभी नहीं दी जाएगी।
- उस बिंदु पर, सोर्स कोड की उस लाइन पर एक डिक्लोकेशन स्टेटमेंट डालें
वहाँ कुछ भी है कि यह पहले से ही है? मुझे नहीं लगता कि Rust या C ++ स्मार्ट पॉइंटर्स / RAII एक ही बात है।