2010-02-23 15 views
29

मैं एक पुस्तक पढ़ रहा हूं और इसमें कुछ पॉइंटर होने के रूप में कुछ डेटा प्रकार का उल्लेख है। इसका मतलब क्या है इसके बारे में सिर्फ उत्सुक है। धन्यवाद।एक लंबा सूचक क्या है?

+1

एमएसडीएन से ऐतिहासिक स्पष्टीकरण: http://msdn.microsoft.com/en-us/library/windows/desktop/ff381404(v=vs.85).aspx –

उत्तर

36

कुछ प्रोसेसरों संकेत के दो प्रकार के, एक के पास संकेतक और एक दूर सूचक है। निकट सूचक की तुलना में निकट सूचक सूचक (इस प्रकार सीमित सीमा है) है। एक दूर सूचक भी एक लंबा सूचक हो सकता है।

कुछ प्रोसेसर आसपास के चीजों के लिए सापेक्ष पते प्रदान करते हैं। एक लंबा सूचक संकेत दे सकता है कि आइटम निकट नहीं है और रिश्तेदार पते का उपयोग नहीं किया जा सकता है।

किसी भी मामले में, लंबे समय से संकेत दिए गए एक मंच विशिष्ट मुद्दा है और अन्य OSes या प्लेटफार्मों पर पोर्टेबल नहीं हो सकता।

संपादित करें:(अधिक विवरण और रिश्तेदार को संबोधित करने का उपयोग)

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

उदाहरण: 32 बिट "लंबे समय" को संबोधित करते हुए और 8 बिट रिश्तेदार को संबोधित कर के साथ एक प्रणाली को देखते हुए। सापेक्ष दूरी आगे (सकारात्मक मूल्य) या पिछली (नकारात्मक) दिशा में कम से कम 127 बाइट्स की अनुमति देगी। यदि लक्ष्य 1024 बाइट दूर है, तो एक पूर्ण 32-बिट पॉइंटर का उपयोग किया जाना चाहिए।

इस अवधारणा है कि ज्यादातर निर्देश और डेटा के पास से कर रहे हैं के आधार पर एक अनुकूलन विशेषता है। अधिकांश लूपों में लूप की शुरुआत और लूप के अंत के बीच एक छोटी दूरी होती है। ये निष्पादन के लिए सापेक्ष संबोधित करते हैं।

अधिकांश डेटा पास है, चाहे कोई डेटा स्थिर या चर हो। अधिक जानकारी में, डेटा फ्रेम या संदर्भ बिंदु के पास है। एक फ्रेम या आधार पते के सापेक्ष, स्थानीय चर ढेर पर रखा जाता है। फ़ंक्शन निष्पादित होने से पहले यह आधार पता स्टैक की शुरुआत है। इस प्रकार डेटा को स्टैक फ्रेम स्टार्ट के सापेक्ष संबोधित करते हुए एक्सेस किया जा सकता है।

प्रोसेसर compilers के लिए रिश्तेदार (पास) को संबोधित करते हुए विशेष निर्देशों का उपयोग करने के लिए अनुमति देते हैं। कई प्रोसेसर पर, सापेक्ष पते का उपयोग करने के निर्देश लंबे पते का उपयोग कर निर्देशों से छोटे होते हैं। इस प्रकार प्रोसेसर को निर्देश कैश से कम लाने की आवश्यकता होती है और निर्देश कैश में अधिक निर्देश हो सकते हैं।

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

+0

क्या यह दूरी इसके दायरे से मापी जाती है? यह कितनी बार encapsulated है? धन्यवाद! – numerical25

+0

@ संख्यात्मक 25: कृपया समझाएं "यह कितनी बार इसे encapsulated है?"। पता लगाने encapsulated नहीं है। –

+2

"स्कोप" इस स्तर पर और मौजूद नहीं है - केवल बाइट्स की एक लंबी सरणी है। आपके सभी कोड को असेंबली में अनुवादित किया जाता है, और यह स्मृति में रखी जाती है। जब चीजें पर्याप्त रूप से पर्याप्त होती हैं तो संकलक निकट पॉइंटर्स उत्पन्न करता है, जब संकलक को दूर पॉइंटर्स उत्पन्न करने की आवश्यकता होती है। –

27

पुस्तक कितनी पुरानी है, इस पर निर्भर करता है कि यह खंडित आर्किटेक्चर का जिक्र कर रहा है, जहां पॉइंटर के दो अलग-अलग "आकार" थे: पास पॉइंटर्स, जो स्थानीय सेगमेंट में इंगित होते हैं (और 16 बिट्स में लगाया जा सकता है) और दूर या लंबे पॉइंटर्स, जो एक और सेगमेंट में इंगित कर सकते हैं (और इसलिए बड़े थे)। यही कारण है कि आप Win32 API में LPVOID जैसे प्रकार देखते हैं: LPVOID एक "लंबा (दूर) पॉइंटर शून्य है", यानी स्मृति में कहीं भी एक सूचक।

एल.पी. और एनपी के उपयोग Win16 से एक हैंगओवर और समय की हिस्सों में बंटा हुआ प्रोसेसर आर्किटेक्चर है।आधुनिक विंडोज़ में, इसके फ्लैट आभासी पता रिक्त स्थान के साथ, निकट और दूर पॉइंटर्स आमतौर पर केवल पुरातात्विक हितों के होते हैं: केवल एक ही प्रकार का सूचक होता है और आप "नज़दीकी" और "लंबे/दूर" क्वालीफायरों को अनदेखा कर सकते हैं।

+1

पुस्तक डायरेक्ट एक्स 9, एमएसवीएस सी ++ 2008 एक्सप्रेस का उपयोग कर रही है। कॉपीराइट 2010. और कुछ डेटाटाइप एलपी से शुरू होते हैं। लेकिन मुझे 2 अलग-अलग उत्तर मिल रहे हैं इसलिए मुझे लगता है कि उनका मतलब 2 अलग-अलग चीजें हो सकता है – numerical25

+0

क्या आप सेगमेंट को परिभाषित कर सकते हैं ?? – numerical25

+0

हो सकता है कि आप संदर्भ में उल्लेखों में से एक पोस्ट कर सकें (उदाहरण के लिए जिस वाक्य में यह प्रकट होता है) - तब हम उस संदर्भ में विशेष रूप से महत्व को समझा सकते हैं। जैसे क्या यह सिर्फ एक पक्ष नोट है कि क्यों कुछ डेटा प्रकारों में एलपी उपसर्ग है? – itowlson

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