2011-03-27 5 views
5

मुझे लगता है कि यह सख्ती से "प्रोग्रामिंग" नहीं है, लेकिन मैं थोड़ी देर के लिए इस पर विचार कर रहा हूं। जब आप एक चर बनाते हैं और इसे मान देते हैं, तो कंप्यूटर कहा गया चर के लिए बाइट्स की एक निश्चित संख्या आवंटित करता है और मान को संग्रहीत करता है, लेकिन यह कैसे पता चलता है कि उस स्मृति पते में किस प्रकार का डेटा है जब इसे बाद में उपयोग करने के लिए वापस आता है?कंप्यूटर कैसे ट्रैक करता है कि किस प्रकार का डेटा एक विशिष्ट स्मृति स्थान संग्रहीत कर रहा है?

उत्तर

4

आम तौर पर, ऐसा नहीं होता है। खैर, अधिकांश गतिशील भाषाओं में typeof की तरह कुछ है, इसलिए आमतौर पर कुछ मेटाडेटा संग्रहीत करने वाला "ऑब्जेक्ट हेडर" होता है, जिसमें प्रकार (और अन्य जानकारी, जैसे रेफकाउंट) शामिल है। लेकिन आप अभी भी किसी ऑब्जेक्ट की यादृच्छिक खंड में स्मृति की पहचान नहीं कर सकते हैं (यह सब 1s और 0s है, सभी के बाद), इसलिए आपको हर समय एक सूचक की आवश्यकता है ...

पारंपरिक स्थिर/संकलित भाषाएं (आमतौर पर, ज़ाहिर है) ऐसी जानकारी स्टोर नहीं करते हैं। आखिरकार, यदि संकलक जानता है कि x एक int है, तो यह जानता है कि रजिस्टरों में कितने बाइट्स को लोड करने की आवश्यकता है और कौन से ऑप्शन को एडिटॉन के लिए उपयोग करना है। यहां तक ​​कि जब आप वर्चुअल फ़ंक्शंस जोड़ते हैं, तो आपको केवल फ़ंक्शन पॉइंटर्स की एक तालिका संकलित करने की आवश्यकता होती है (बिना किसी मेटाडेटा की आवश्यकता होती है - obj->foo() "इस पते पर कॉल कोड" के बजाय "vtable की nth प्रविष्टि लाने और इसे कॉल करने" के लिए अनुवाद करता है)।

2

कंप्यूटर नहीं करता है। कुछ भाषाएं अपने डेटा को प्रकारों के साथ टैग कर सकती हैं (विशेष रूप से, गतिशील भाषाएं, जहां कोई भी चर कोई डेटा प्रकार रख सकता है); अन्य भाषाओं में (जैसे सी), आप चर घोषित करते हैं, और संकलक जानता है कि जब भी यह उस चर के साथ जुड़े पते स्थान का उपयोग किसी विशिष्ट प्रकार के रूप में मानने के लिए करता है। कंप्यूटर स्वयं परवाह नहीं करता है, यह सब 8 बिट प्रति बाइट देखता है।

5

उत्तर इस बात पर निर्भर करता है कि जिस भाषा में आप काम कर रहे हैं उसका अर्थ है या संकलित किया गया है, और कई अन्य विवरणों पर। सी जैसी संकलित भाषा के लिए, जवाब यह है कि कंपाइलर, जबकि यह आपके कोड को मशीन कोड (या असेंबलर) में अनुवाद कर रहा है, में एक आंतरिक डेटा संरचना है जिसमें कहा गया है कि प्रत्येक चर क्या है - इसका प्रकार क्या है, जहां यह संग्रहीत है, और शायद ऑप्टिमाइज़ेशन उद्देश्यों के लिए भी अन्य जानकारी। (लेकिन जब तक आपका कोड वास्तव में चल रहा है, वह जानकारी पूरी हो गई है; इसे आपके कोड को संकलित करने की आवश्यकता है लेकिन इसे चलाने के लिए नहीं है।)

कुछ व्याख्या की गई भाषाओं के लिए, उत्तर यह है कि दुभाषिया का एक समान डेटा है संरचना जब भी चर का उपयोग किया जाता है देखा जाता है। दूसरों के लिए, सभी चरों को दुभाषिया द्वारा समान तरीके से माना जाता है लेकिन उनके मान में उनके साथ टाइप की गई जानकारी है।

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