प्रतीक तालिका क्या है?


87

क्या कोई वर्णन कर सकता है कि C और C ++ के संदर्भ में एक प्रतीक तालिका क्या है?

जवाबों:


81

प्रतीक तालिका के दो सामान्य और संबंधित अर्थ हैं।

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

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

यदि आप अधिक सीखना चाहते हैं, तो मैं जॉन लेविन की उत्कृष्ट पुस्तक "लिंकर्स एंड लोडर्स" का सुझाव देता हूं। लिंक पाठ


हाय बेन, दूसरे मामले में, आप एक्सपोर्ट टेबल की बात कर रहे हैं? अर्थात्, निर्यात तालिका प्रतीक तालिका का एक विशेष मामला है? या ये असंबंधित अवधारणाएं हैं?
पूव

नमस्ते। मेरा मानना ​​है कि यह किसी भी ऑब्जेक्ट फ़ाइल में नहीं है, लेकिन उनसे संदर्भित है। दूसरे, क्या आप कृपया थोड़ा और समझा सकते हैं कि आपको "अंतिम स्थान" से क्या मतलब है? स्रोत कोड में भौतिक पता या अंतिम सापेक्षिक पता।
stdout

26

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

यह सामान्य है, न केवल C [++] *। तकनीकी रूप से, इसमें हमेशा प्रत्यक्ष मेमोरी एड्रेस शामिल नहीं होता है। यह इस बात पर निर्भर करता है कि संकलक किस भाषा, मंच आदि को लक्षित कर रहा है।


मुझे लगता है, "यह हमेशा प्रत्यक्ष स्मृति पता शामिल नहीं करता है" कहकर पते की सामग्री का उल्लेख करना बहुत महत्वपूर्ण था।
stdout

13

लिनक्स में, आप कमांड का उपयोग कर सकते हैं:

एनएम [ऑब्जेक्ट फ़ाइल]

उस ऑब्जेक्ट फ़ाइल के प्रतीक तालिका को सूचीबद्ध करने के लिए। इस प्रिंटआउट से, फिर आप उनके मंगवाए गए नामों से इन-यूज़ लिंकर प्रतीकों को समझ सकते हैं ।


8

प्रतीक तालिका एक कार्यक्रम / इकाई में "प्रतीकों" की सूची है। प्रतीक अक्सर चर या कार्यों के नाम होते हैं। प्रतीक तालिका का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि मेमोरी चर या फ़ंक्शन कहाँ स्थित होंगे।



0

प्रतीक तालिका एक महत्वपूर्ण डेटा संरचना है जिसे कंपाइलरों द्वारा विभिन्न संस्थाओं जैसे कि चर नामों, फ़ंक्शन नामों, ऑब्जेक्ट्स, क्लासेस, इंटरफ़ेस आदि की घटना के बारे में जानकारी संग्रहीत करने के लिए बनाया और बनाए रखा जाता है।


लिंकर्स और कोडांतरक भी प्रतीक तालिकाओं के साथ व्यवहार करते हैं (अक्सर संकलक की तुलना में सरल)।
बेसिल स्टारीनेवविच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.