मुद्दा ज्यादातर ऐतिहासिक कलाकृतियों का है, कार्यान्वयन की असंभवता का नहीं।
जिस तरह से अधिकांश सी कंपाइलर कोड का निर्माण करते हैं, ताकि कंपाइलर प्रत्येक स्रोत फ़ाइल को एक बार में देख सके; यह कभी भी पूरे कार्यक्रम को एक साथ नहीं देखता है। जब एक स्रोत फ़ाइल किसी अन्य स्रोत फ़ाइल या लाइब्रेरी से फ़ंक्शन को कॉल करती है, तो सभी कंपाइलर फ़ंक्शन के रिटर्न प्रकार के साथ हेडर फ़ाइल को देखता है, फ़ंक्शन का वास्तविक कोड नहीं। इसका मतलब है कि जब कोई फ़ंक्शन होता है जो एक पॉइंटर लौटाता है, तो कंपाइलर के पास यह बताने का कोई तरीका नहीं है कि मेमोरी पॉइंटर को फ्रीज करने की आवश्यकता है या नहीं। उस समय पर संकलक को नहीं दिखाया जाता है यह तय करने की जानकारी। एक मानव प्रोग्रामर, दूसरी तरफ, फ़ंक्शन के स्रोत कोड को देखने के लिए स्वतंत्र है या यह पता लगाने के लिए दस्तावेज है कि पॉइंटर के साथ क्या करने की आवश्यकता है।
यदि आप C ++ 11 या Rust जैसी अधिक आधुनिक निम्न-स्तरीय भाषाओं में देखते हैं, तो आप पाएंगे कि वे ज्यादातर सूचक के प्रकार में मेमोरी स्वामित्व को स्पष्ट करके समस्या का समाधान करते हैं। C ++ में आप मेमोरी को होल्ड करने के लिए unique_ptr<T>
प्लेन के बजाय का उपयोग करेंगे T*
और यह unique_ptr<T>
सुनिश्चित करेंगे कि ऑब्जेक्ट को स्कोप के विपरीत स्कोप के अंत तक पहुँचने पर मेमोरी फ़्री हो जाए T*
। प्रोग्रामर मेमोरी को एक unique_ptr<T>
से दूसरे को सौंप सकता है , लेकिन मेमोरी में केवल एक ही unique_ptr<T>
पॉइंटिंग हो सकती है । इसलिए यह हमेशा स्पष्ट होता है कि स्मृति का मालिक कौन है और इसे कब मुक्त किया जाना है।
C ++, पश्चगामी अनुकूलता कारणों के लिए, फिर भी पुरानी शैली के मैनुअल मेमोरी प्रबंधन की अनुमति देता है और इस तरह से बग या तरीके के निर्माण की सुरक्षा को दरकिनार कर देता है unique_ptr<T>
। जंग और भी सख्त है कि यह संकलक त्रुटियों के माध्यम से स्मृति स्वामित्व नियमों को लागू करता है।
अनिर्वायता के रूप में, रुकने की समस्या और इस तरह, हाँ, यदि आप सी शब्दार्थ से चिपके रहते हैं, तो सभी कार्यक्रमों के लिए निर्णय लेना संभव नहीं है जब स्मृति को मुक्त किया जाना चाहिए। हालांकि, अधिकांश वास्तविक कार्यक्रमों के लिए, अकादमिक अभ्यास या छोटी गाड़ी सॉफ्टवेयर नहीं, यह पूरी तरह से तय करना संभव होगा कि कब और क्या नहीं करना है। यह एकमात्र कारण है कि मानव पहली बार मुक्त होने या न होने का पता कैसे लगा सकता है।