memory - When does a mutable state value freed from heap? -


अनुभाग पर एफ # विकीबुक पर, एक निम्न कोड स्निपेट है।

  & gt; Let incr = दें counter = ref 0 मजेदार () - & gt; काउंटर: =! काउंटर + 1! काउंटर ;; Val incr: (इकाई - & gt; int) & gt; incr () ;; यह मान: int = 1 & gt; incr () ;; यह मान: int = 2 & gt; incr () ;; पहली बार, इस तथ्य को निगलने में काफी आसान लग रहा था कि, हर बार  incr  म्यूट्यूबल  काउंटर  मूल्य में बढ़ोतरी करता है;  

लेकिन इसके बारे में थोड़ी देर के लिए सोचने के बाद, जो मुझे समझ में नहीं आ रहा था जब काउंटर ढेर से मुक्त हो गया था और फिर भी कैसे काउंटर अभी भी Incremented होने से पहले पिछले मान को संदर्भित करता है। काउंटर जो कि incr के भीतर रहता है, वह समारोह समारोह कई फ़ंक्शन कॉल्स के माध्यम से कैसे बचा है?

इसलिए मुख्य प्रश्न हैं:

  • जब काउंटर ढेर से मुक्त होता है?
  • क्या एक स्मृति रिसाव काउंटर नहीं है
< 'लेक्सिकल गुंजाइश' (जहां एक नाम एक प्रोग्राम के पाठ में अर्थ है) और 'आजीवन' (ऑब्जेक्ट के बीच रनटाइम अवधि) के बीच का अंतर, p>

बनाया और नष्ट कर दिया जाता है) कभी-कभी भ्रामक हो सकते हैं, क्योंकि अक्सर ये दोनों अत्यधिक सहसंबंधित होते हैं। हालांकि इस उदाहरण द्वारा प्रदर्शित तकनीक आम तौर पर कार्यात्मक भाषाओं में है: आप एक कार्यान्वयन को एक छोटे से लेक्सिकल गुंजाइश देते हैं (जो कॉल करने वाले कार्यान्वयन विवरण को छुपाता है), लेकिन इसे समापन में कब्जा करके अपने जीवनकाल को बढ़ाएं (ताकि उसके जीवनकाल का जीवनकाल बन जाए संलग्न ऑब्जेक्ट का - इस उदाहरण में 'incr' फ़ंक्शन) यह कार्यात्मक प्रोग्रामिंग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में कक्षाओं में सार्वजनिक / निजी की सामान्य एनकॅप्सनिंग तकनीक के साथ विपरीत) के लिए एक आम तरीका है।

अब, इस विशेष उदाहरण में, यह लग रहा है 'incr 'एक शीर्ष-स्तरीय फ़ंक्शन है, जिसका अर्थ है कि इसका मान कार्यक्रम के जीवनकाल (या इंटरफ़ेसटिव सत्र के लिए रहता है अगर fsi.exe में टाइपिंग) के लिए रहता है। आप इसे 'रिसाव' कह सकते हैं, लेकिन यह इरादे पर निर्भर करता है। यदि आपके पास कुछ विशिष्ट आईडी काउंटर है जो आपको अपने संपूर्ण कार्यक्रम के पूरे जीवनकाल के लिए आवश्यक है, तो आपको उस काउंटर को कहीं भी स्टोर करना होगा, जो पूरे कार्यक्रम के लिए रहता है। तो या तो यह 'एक रिसाव' या 'ए डिज़ाइन फीचर' पर निर्भर करता है कि 'incr' कैसे उपयोग किया जाएगा (क्या आपको पूरे कार्यक्रम के लिए उस फ़ंक्शन का उपयोग करने की आवश्यकता होगी?)। किसी भी मामले में, मुख्य बिंदु यह है कि 'incr' मेमोरी संसाधन हैं, इसलिए यदि आपको उन संसाधनों को हमेशा की आवश्यकता नहीं होगी, तो आपको '' इंक '' द्वारा संदर्भित बंद होने की व्यवस्था की जानी चाहिए, जब यह अब जरूरी नहीं है। आम तौर पर यह किसी अन्य फ़ंक्शन पर स्थानीय बनाकर हो सकता है, जैसे

  चलो मायकॉप्लाइड फंट्सटैनेट्ससोलोकल क्वॉर्टर आर्ग्स = इंक = // जैसा कि पहले / दूसरे कोड का उपयोग करता है जो इंक / का उपयोग करता है, कुछ नतीजे निकालते हैं। Incr  
को कैप्चर करें

Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -