2012-03-27 13 views
8

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

क्या कोई आधुनिक कंपाइलर (उदा। जीसीसी, क्लैंग, विजुअल सी) समर्थन एक्सटेंशन जो मुझे यह बताने की अनुमति देता है कि इन अनुकूलन करने के लिए ठीक है?

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

मुझे पता है कि जीसीसी इस्तेमाल किया ठीक इस अनुमति के लिए एक -fipa-struct-reorg विकल्प होता है करने के लिए है, लेकिन यह कभी नहीं बहुत अच्छी तरह से और बिट सड़ काम किया है, और अंततः बाहर ले जाया गया था। लेकिन मुझे नहीं पता कि इसे किसी भी चीज़ से बदल दिया गया है या नहीं। और मैं क्लैंग में कुछ भी नहीं ढूंढ पा रहा हूं, जो मुझे आश्चर्यचकित करता है क्योंकि मुझे लगता है कि यह ठीक तरह का अनुकूलन है जो क्लैंग खत्म हो जाएगा ...

+0

क्या इस तरह की चीजों को अनुकूलित करने में सक्षम होंगे? –

+1

यह * मदद * मदद कर सकता है यदि आप स्ट्रक्चर वेरिएबल स्टोरेज क्लास 'रजिस्टर' देते हैं, जो लागू करता है कि आप भाषा स्तर पर मेमोरी लेआउट पर भरोसा नहीं करते हैं; हालांकि, अनुकूलक 'रजिस्टर' की उपस्थिति के बावजूद इसे समझने में सक्षम होना चाहिए, और मुझे कोई जानकारी नहीं है कि यह अभ्यास में कोई फर्क पड़ता है ... – Christoph

+0

दुर्भाग्य से काम नहीं करता है, लेकिन कोशिश करने लायक है --- टा। ('रजिस्टर' संरचना सदस्यों या स्थैतिक चर पर मान्य नहीं है, और ऑटो चर पर अनदेखा प्रतीत होता है।) –

उत्तर

4

नहीं। ऐसे कोई कारण नहीं है आपूर्ति की जाने वाली चीज।

  1. आप ऐसा नहीं कर सकते हैं जहां संरचना का पता लिया जाता है और कहीं भी भेजा जाता है, क्योंकि इसे किसी भी तरह से अलियोजित किया जा सकता है। यह एक ही समारोह के बाहर कुछ भी बाहर नियम है।

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

  3. यदि अनिश्चित है, तो बस टिप्पणी करें और देखें कि क्या आपको संकलन त्रुटि मिलती है या नहीं।

+0

अच्छा, यकीन है, लेकिन यह वास्तव में प्रासंगिक नहीं है --- मैं स्थिर विश्लेषण के बारे में नहीं पूछ रहा था और, जैसा कि मैंने मूल प्रश्न में कहा था, मैं उन स्थितियों से बचने के लिए तैयार हूं जहां संरचनाओं को अनुकूलित करने से कोड टूट जाएगा। –

+1

@ डेविडगिवेन, मैं इस सुविधा के लिए उपयोग-मामले के बारे में सोचने के लिए संघर्ष कर रहा हूं। मेरा जवाब, मूल रूप से, यह है कि कोई नहीं है, यही कारण है कि यह पेशकश नहीं की जाती है। यदि आपके पास कोई है, तो इसे प्रश्न में जोड़ें। – Ben

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