2013-08-21 6 views
5

मैं कोड विशेषता _ ((सेक्शन ("नाम")) का उपयोग कर कोड के माध्यम से भाग गया है। मैं समझता हूं कि जीसीसी कंपाइलर के लिए यह आपको लिंकर को एक विशिष्ट खंड "नाम" पर बनाए गए ऑब्जेक्ट को रखने की अनुमति देता है (।?। "नाम" पूर्ण पते में एक लिंकर फ़ाइल में घोषित)__attribute __ ((अनुभाग ("नाम"))) उपयोग?

क्या बजाय यह कर बस .data अनुभाग का उपयोग करने का बिंदु है साथ

+0

ऐसा इसलिए है क्योंकि यह उस कोड का मंच है जिस पर मैं काम कर रहा हूं। मुझे इस तथ्य से अवगत है कि यह ____attribute____ केवल कुछ प्लेटफॉर्म पर उपलब्ध है, इसलिए मैं इसे स्पष्टता के लिए शामिल करना चाहता था। मैं समझने की कोशिश कर रहा हूं कि कोडर का इरादा क्या है जब उसने कुछ वस्तुओं को टेस्ट ऑब्जेक्ट्स में विभाजित किया, ऑब्जेक्ट्स का पता लगाया। – tll

+0

मैंने एआरएम सेक्शन हटा दिया, इसलिए यह स्पष्ट है कि मैं एआरएम विशेष रूप से उपयोग के बारे में चिंतित नहीं हूं। – tll

उत्तर

5

कई संभावित उपयोगों रहे हैं [नोट जोड़ने के लिए संपादित करें: इस केवल उन प्रयोगों का नमूना है जो मैंने स्वयं को देखा है या माना है, पूरी सूची नहीं है।]

उदाहरण के लिए, लिनक्स कर्नेल कुछ कोड और डेटा सेक्टियो चिह्नित करता है एनएस केवल कर्नेल बूटस्ट्रैप के दौरान प्रयोग किया जाता है। कर्नेल चल रहा है, अन्य उपयोगों के लिए जगह पुनः प्राप्त करने के बाद इन्हें jettisoned किया जा सकता है।

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

आप चीजों को "विशेष" पता रिक्त स्थान में रहने के लिए इसका उपयोग कर सकते हैं जो सामान्य स्मृति की बजाय प्रोम को जला दिया जाएगा या ईईपीरोम पर सहेजा जाएगा।

आप प्रारंभिकरण और सफाई जैसे प्रयोजनों के लिए कोड या डेटा क्षेत्रों को इकट्ठा करने के लिए इसका उपयोग कर सकते हैं, जैसे सी ++ कन्स्ट्रक्टर और विनाशक जो प्रोग्राम शुरू होने से पहले चलते हैं और जब यह समाप्त होता है, या छोटे एड्रेसिंग मोड का उपयोग करने के लिए (मैं नहीं करता पता है कि एआरएम पर कितना लागू होगा क्योंकि मैंने स्वयं कोई एआरएम कोड नहीं लिखा है)।

वास्तविक उपयोग लिंकर स्क्रिप्ट (ओं) पर निर्भर करता है।

+0

* कैश इलाके * के लिए अन्य उपयोग ** गर्म ** और ** ठंडा ** हैं। आप कार्यक्षमता को विभाजित भी कर सकते हैं, जैसे इंटरप्ट हैंडलिंग, शेड्यूलिंग इत्यादि। हालांकि नियमित/कार्यक्षमता एक 'सी' फ़ाइल में हो सकती है, लेकिन ठेठ निष्पादन पथ * कॉल स्टैक * समूहबद्ध करके लाभ उठा सकता है। कुछ कोड * फ्लैश * या * आंतरिक राम * से निष्पादित हो सकते हैं। ये संसाधन शायद सीमित हो सकता है, आदि –

+0

@torek प्रारंभिक/सफाई के लिए कोड/डेटा क्षेत्रों को एकत्रित करने के बारे में आपके आखिरी बिंदु पर, इसका अनिवार्य रूप से मतलब है कि मैं प्रोग्राम शुरू होने से पहले कोड शामिल करना चुन सकता हूं, लेकिन संकलन समय के बजाय रनटाइम के दौरान? #ifdef के बेहतर संस्करण की तरह सॉर्ट करें? – tll

+0

मुझे यकीन नहीं है कि आप यहां क्या पूछ रहे हैं। यदि आपने एक लिंकर स्क्रिप्ट लिखी है जिसमें कुछ अनुभाग शामिल हैं और दूसरों को त्याग दिया गया है, तो आप * लिंक * समय पर टुकड़े शामिल या बहिष्कृत कर सकते हैं। * रन * समय पर सामान करना आपके लिंकर स्क्रिप्ट और आपके रन-टाइम कोड को समन्वयित करने की आवश्यकता है, और यह बहुत कठिन है। – torek

2

देखने के एक USECASE बिंदु से, वहाँ .data के विभिन्न प्रकार के बहुत सारे, की तरह हैं:

  • डेटा एक विशिष्ट सीपीयू और/या NUMA नोड के लिए स्थानीय
  • डेटा (उपयोगकर्ता की तरह संदर्भों के बीच साझा/कर्नेलस्पेस, .vdso या vsyscall पृष्ठ हैं। या, एक और उदाहरण, बूटलोडर और कर्नेल)
  • विशिष्ट डेटा या विशिष्ट एक्सेस मोड/प्रकार प्रतिबंधों के साथ अन्य डेटा (कहें, कैशबिलिटी या कैश रेजीडेंसी - बाद वाले को कुछ एआरएम पर निर्दिष्ट किया जा सकता है एसओसी)
  • डेटा जो "राज्य संक्रमण" (जैसे हाइबरनेशन छवि लोड, या क्रैश कर्नेल/फास्ट रीबूट पुनर्नवीनीकरण)
  • विशिष्ट जीवनकाल/जीवनशैली के साथ डेटा (केवल बूट के दौरान या ऑपरेशन के दौरान विशिष्ट चरणों में उपयोग किया जाता है, एक बार डेटा लिखता है)
  • डेटा एक विशेष कर्नेल उपतंत्र या विशेष कर्नेल मॉड्यूल के लिए विशिष्ट
  • "कोड colocated" डेटा (64 में ऑफसेट को संबोधित प्लस हैं/शून्य से 2GB इसलिए यदि आप RIP -relative संबोधित डेटा की उस सीमा के भीतर होना चाहिए चाहते हैं कि आपके वर्तमान में कोड निष्पादित)
  • कुछ विशिष्ट हार्डवेयर रजिस्टर स्थान मैप किए गए डेटा वीए रेंज

तो अंत में यह अक्सर के बारे में गुण (शब्द यहाँ क्या __attribute__(...) आप जीसीसी sourcecode के भीतर से राज्य के लिए अनुमति देता है की तुलना में एक अधिक सामान्य अर्थ में प्रयोग किया है। चाहे किसी अन्य अनुभाग की आवश्यकता हो और/या उपयोगी है ... दर्शक की नजर में - सिस्टम डिजाइनर, जो है।

section विशेषता का लाभ, इसलिए लचीलापन और यह एक अच्छी बात है, आईएमएचओ की अनुमति देता है।

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