2009-02-24 5 views
6

उदाहरण के लिए, जावास्क्रिप्ट मेंस्क्रिप्टिंग भाषाओं में चर के लिए स्मृति आवंटन कैसे किया जाता है?

मैं कह सकता हूँ

var x = 5; 

बाद में मैंने

x = 'a'; 

और फिर

x = "hello"; 

तो कर सकते हैं, कैसे स्मृति चर के लिए आवंटित किया जाता है ? जैसा कि है, सभी चरों में एक सामान्य प्रकार 'var' होता है और चर के मान रन-टाइम पर ऊपर देखे जा सकते हैं। क्या इन चर के लिए स्मृति आवंटित और प्रबंधित करना मुश्किल नहीं है? बिल्कुल, यह कैसे किया जाता है?

+0

यह स्टैक ओवरफ़्लो भी देखें [जावास्क्रिप्ट में चर को आवंटित कैसे किया जाता है?] (Http://stackoverflow.com/questions/2800463/how-variables-are-allocated-memory-in-javascript) विशेष रूप से एक टिप्पणी जिसमें शामिल है इस शोध प्रबंध के लिए एक लिंक [योजना के लिए तीन कार्यान्वयन मॉडल] (http://www.cs.unm.edu/~williams/cs491/three-imp.pdf) आर केंट डाइबविग द्वारा। –

उत्तर

3

पायथन reference counting नामक एक तकनीक का उपयोग करता है, जो मूल रूप से मूल्य में काउंटर डालता है। प्रत्येक बार एक मान का संदर्भ बनाया जाता है, काउंटर बढ़ता है। जब मान का संदर्भ खो जाता है (उदाहरण के लिए जब आप 'x' पर नया मान निर्दिष्ट करते हैं, तो मान कम हो जाता है। जब काउंटर शून्य तक पहुंच जाता है, तो इसका मतलब है कि मूल्य का कोई संदर्भ मौजूद नहीं है, और इसे हटाया जा सकता है। यह एक सरलीकृत स्पष्टीकरण है, लेकिन यह कम से कम मूल बातें है।

+0

तो एक्स के रूप में क्या माना जाएगा? जब मैं x = 5 कहता हूं, तो इसे आवंटन के दौरान एक int या स्ट्रिंग के रूप में माना जाएगा? और प्रकार की जानकारी कहाँ संग्रहित की जाएगी? –

+0

परिवर्तनीय आवंटित कैसे किया जाता है और प्रकार की जानकारी संग्रहीत की जाती है कार्यान्वयन विशिष्ट होगी। यदि आप देखना चाहते हैं कि एक कार्यान्वयन कैसे करता है, तो आप राइनो डाउनलोड कर सकते हैं: जावा के लिए जावास्क्रिप्ट http://www.mozilla.org/rhino/। –

+0

यह केवल सीपीथन में सच है और कचरा संग्रह को भी अनदेखा करता है। आपको इसे ठीक करना चाहिए। – Antimony

1

शायद यह link कम से कम जावास्क्रिप्ट के हिस्से पर अधिक अंतर्दृष्टि प्रदान करता है।

0

अच्छी तरह से, उन चर अपरिवर्तनीय तारों के संदर्भ हैं जो संकलन समय पर आवंटित किए जाते हैं।

बेशक यह वीएम पर निर्भर करता है, लेकिन आम तौर पर, मुझे लगता है कि, अधिकांश सी-आधारित स्क्रिप्टिंग भाषाओं मेमोरी का एक बड़ा ब्लॉक आवंटित करते हैं, इसे आवश्यक रूप से विस्तारित करते हैं और इसके भीतर अपना आवंटन करते हैं, शायद ही कभी कभी कुछ भी वापस दे ओ/एस के लिए। विशेष रूप से एक व्याख्यात्मक रूप से स्कॉप्ड भाषा में, जो लगभग सभी हैं, चर को इस ब्लॉक के भीतर गतिशील रूप से आवंटित किया जाता है, सी सी स्टैक के समान कुछ भी नहीं, और वे संदर्भ गणना या कचरा कलेक्टर के साथ मुक्त होते हैं।

यदि आपकी स्क्रिप्टिंग भाषा JVM, या .NET, या ऐसा कुछ (तोता?) पर चल रही है, तो एक चर बनाने वाला केवल जावा ऑब्जेक्ट की तरह कुछ बनाना है। ऑब्जेक्ट के लिए कोई और संदर्भ नहीं होने के कुछ समय बाद, कचरा कलेक्टर स्मृति को पुनः प्राप्त करेगा।

+0

सिवाय इसके कि वीएम भागने का विश्लेषण कर सकता है और कभी-कभी स्टैक पर वस्तुओं को आवंटित कर सकता है। – Antimony

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