सी मानक संरचनाओं के कुछ अनुकूलन की अनुमति नहीं देता है: उदाहरण के लिए, फ़ील्ड का पुनर्गठन, फ़ील्ड विलय करना, उन फ़ील्ड को छोड़ना जिन्हें कभी नहीं पढ़ा जाता है, संरचना से बाहर खेती करते हैं यदि उन्हें ऑटो चर में बदल दिया जा सकता है , आदि। संकलन इकाइयों में लगातार संरचना लेआउट सहित और विभिन्न प्रकार के लिए यह आवश्यक है, जिसमें कास्ट-संगत संरचनाओं की अनुमति है।सी कंपाइलर संरचना ऑप्टिमाइज़ेशन
क्या कोई आधुनिक कंपाइलर (उदा। जीसीसी, क्लैंग, विजुअल सी) समर्थन एक्सटेंशन जो मुझे यह बताने की अनुमति देता है कि इन अनुकूलन करने के लिए ठीक है?
स्वाभाविक रूप से, वे केवल परिभाषाओं के लिए समझ में आते हैं जो एक एकल संकलन इकाई के लिए स्थानीय थे, ताकि संकलक संरचना के सभी संभावित उपयोग देख सकें; और कुछ चीजें (उपर्युक्त कास्ट-संगत संरचना परिभाषाओं की तरह) अनुपयोगी हो जाएगी। लेकिन कुछ कार्यों के लिए यह एक बहुत ही मूल्यवान अनुकूलन हो सकता है।
मुझे पता है कि जीसीसी इस्तेमाल किया ठीक इस अनुमति के लिए एक -fipa-struct-reorg
विकल्प होता है करने के लिए है, लेकिन यह कभी नहीं बहुत अच्छी तरह से और बिट सड़ काम किया है, और अंततः बाहर ले जाया गया था। लेकिन मुझे नहीं पता कि इसे किसी भी चीज़ से बदल दिया गया है या नहीं। और मैं क्लैंग में कुछ भी नहीं ढूंढ पा रहा हूं, जो मुझे आश्चर्यचकित करता है क्योंकि मुझे लगता है कि यह ठीक तरह का अनुकूलन है जो क्लैंग खत्म हो जाएगा ...
क्या इस तरह की चीजों को अनुकूलित करने में सक्षम होंगे? –
यह * मदद * मदद कर सकता है यदि आप स्ट्रक्चर वेरिएबल स्टोरेज क्लास 'रजिस्टर' देते हैं, जो लागू करता है कि आप भाषा स्तर पर मेमोरी लेआउट पर भरोसा नहीं करते हैं; हालांकि, अनुकूलक 'रजिस्टर' की उपस्थिति के बावजूद इसे समझने में सक्षम होना चाहिए, और मुझे कोई जानकारी नहीं है कि यह अभ्यास में कोई फर्क पड़ता है ... – Christoph
दुर्भाग्य से काम नहीं करता है, लेकिन कोशिश करने लायक है --- टा। ('रजिस्टर' संरचना सदस्यों या स्थैतिक चर पर मान्य नहीं है, और ऑटो चर पर अनदेखा प्रतीत होता है।) –