21

मैं एक बड़ी सी ++ परियोजना के संकलन समय को कम करना चाहता हूं। मैंने प्रीकंपिल्ड हेडर, इंटरफेस और इत्यादि का उपयोग करने की कोशिश की। लेकिन आगे बढ़ने से पहले, मैं जानना चाहता हूं कि कोई उपकरण जो संकलन समय का पता लगाने में मदद करता है। कोई पीसीसी-लिंट सुझाता है और मैं एक शॉट दूंगा। How should I detect unnecessary #include files in a large C++ project? लेकिन अगर ऐसे अन्य उपकरण हैं जो विश्लेषण संकलन समय और संकलन गति को बढ़ाने के लिए किसी भी संकेत के बारे में बात करते हैं, तो मुझे बताएं। अग्रिम धन्यवाद।मुझे बड़ी सी ++ परियोजना में संकलन समय की बाधा का पता कैसे लगाया जाना चाहिए?

पर्यावरण: माइक्रोसॉफ्ट विजुअल स्टूडियो C++ 2008 या 2010

+1

नहीं सीधे एक जवाब है, लेकिन आप पर समानांतर निर्माण बारी किया था? – dbrank0

+0

सामान्य टिप्पणी में उन शीर्षलेखों को शामिल नहीं किया गया है जिनकी आपको आवश्यकता नहीं है। निर्माण समय के लिए सबसे बुरी चीज एक हेडर फ़ाइल है जिसे include.hpp कहा जाता है जिसमें आपको आवश्यक सभी संभावित शीर्षलेख फ़ाइलें शामिल होती हैं। मैंने देखा है कि ब्लोट फिर से संकलित समय। –

+4

हार्डवेयर अपग्रेड के बारे में कैसे? –

उत्तर

3

मैं संकलन समय की बेहतरी के लिए किसी भी उपकरण के बारे में पता नहीं कर रहा हूँ, लेकिन कुछ मैनुअल उपचार, मेरा सुझाव है (टिप्पणी के रूप में इस पर विचार करें) कर सकते हैं:

  1. ताकि कई समावेशन किसी भी मुद्दे नहीं होगा
  2. कम सदस्य समारोह शरीर, इनलाइन समारोह शरीर सीधे डाल हेडर फाइल में हर हेडर फाइल के साथ #include गार्ड है,; बस उनकी घोषणाएं
  3. जांचें कि क्या कोई अनावश्यक template फ़ंक्शन और कक्षाएं नहीं हैं; याद रखें कि डिफ़ॉल्ट रूप से tempaltes inline बन जाते हैं। टेम्पलेट्स/मेटाप्रोग्रामिंग का बहुत अधिक विशाल संकलन समय का कारण बनता है।
  4. #define रों की संख्या अनावश्यक रूप से अधिक होती है तो वे वृद्धि preprocessing चरण, अंत में बढ़ जाती है संकलन समय
5

एक दृष्टिकोण मैं आपके स्रोतों में से कुछ की पूर्वप्रक्रमक उत्पादन की समीक्षा करना है जो होगा - #inclu सायन है कि कुछ हद तक अमूर्त प्रतिनिधित्व के बजाय बस कुछ संकलक के परिप्रेक्ष्य से इसे पढ़ें। संभावना है कि आपको शामिल/पुस्तकालयों के कुछ बड़े हिस्से मिलेंगे जिनकी आपको आवश्यकता नहीं है और निर्भरता/शामिल के अस्तित्व (या आवश्यकता) के बारे में जरूरी नहीं है। वहां से, तय करें कि कौन सी निर्भरताओं को हटाया जा सकता है। भले ही आपकी निर्भरताएं सही हों, बड़े आउटपुट यह भी सुझाव दे सकते हैं कि आप छोटे मॉड्यूल को छोटे टुकड़ों में विभाजित करने के तरीके से कैसे संपर्क कर सकते हैं।

4

सी ++ मॉड्यूलर (अभी तक) होने के कारण, संकलन बाधाओं को अक्सर मुद्दों को शामिल करने के कारण होते हैं; जब उनकी आवश्यकता नहीं होती है तो बहुत सारी फाइलें शामिल कर रही हैं। यह भी संभव है कि इस समय पर आवश्यक है, लेकिन कुछ सरल पुनर्वितरण के साथ अनिवार्य हो सकता है।

  • ज़रूरत से ज़्यादा शामिल पता लगाने के लिए, आप जाँच कर सकते हैं include-what-you-use, केवल मुद्दा आप होगा कि यह बजना के शीर्ष पर काम करता है, तो आप वहाँ कुछ सेटअप की आवश्यकता होगी।
  • अन्यथा, आपको अपने कोड की समीक्षा करने की आवश्यकता है, और विशेष रूप से शीर्षलेख

चूंकि उपकरण स्व-पर्याप्त और दस्तावेज है, इसलिए मुझे समीक्षा प्रक्रिया पर थोड़ा विस्तार करने दें।

  1. कोई भी शीर्षलेख जो #include से अधिक है, अत्यधिक संदिग्ध है।
  2. इसके विपरीत, यदि आपके पास एक स्रोत फ़ाइल है जो विभिन्न प्रकारों और कार्यों से भरा हुआ है और इसमें केवल कुछ जोड़े शामिल हैं, तो शायद इसका मतलब है कि हेडर में से एक बहुत अधिक लाता है।

यदि आपको यह जानने में परेशानी हो रही है कि क्या आवश्यक है, क्या नहीं है, और अनावश्यक हेडर को कैसे हटाया जाए, तो मैं Pimpls - Beauty Marks You Can Depend On पढ़ने की अनुशंसा करता हूं; यदि आपको नहीं पता कि एक पिंपल क्या है, तो Compilation Firewalls पढ़ें। हालांकि सावधानी बरतने की सलाह दी जाएगी, हालांकि, पिंपल में रनटाइम और रखरखाव लागत है, इसलिए इसे वास्तव में जरूरी होने पर ही इसका इस्तेमाल करें। व्यक्तिगत रूप से मैं पूरी तरह से उस पुस्तकालय के सार्वजनिक शीर्षकों में अनुशंसा करता हूं जो आप तृतीय पक्ष (एबीआई संगतता) को देते हैं, और अन्यथा इससे बचने की कोशिश करें।

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

1

आप unity builds.
पर गौर कर सकता है मूल रूप से यह और एक .cpp फ़ाइल में सभी .cpp फ़ाइलों सहित जाता है कि एक फ़ाइल केवल संकलन। मैंने इसे एक बड़ी परियोजना पर परीक्षण किया है और यह वास्तव में प्रभावी था।
यह काम करता है क्योंकि यह बहुत कम I/O का उपयोग करता है जब इसमें आपके सभी शीर्षलेख/सीपीपी शामिल होते हैं और प्रत्येक सीपीपी के लिए नहीं।

अब हम एकता का निर्माण नहीं करते हैं क्योंकि हम सभी को एक एसएसडी हार्डवेयर अपग्रेड मिला है, और वे बहुत ही अच्छे हैं।

यहाँ एक संबंधित एसओ एकता के बारे में सवाल बनाता है: #include all .cpp files into a single compilation unit?

+0

+1 - यूनिटी बिल्ड्स पर बहुत ही रोचक टिप्पणी - मुझे अगली बार जब मैं निम्न-स्तरीय शीर्षलेख को स्पर्श करता हूं तो उसे आजमा देना होगा। एसएसडी के लिए, मुझे खेल के लिए देर हो चुकी है: एचडीडी दुर्घटना के बाद इसे लैपटॉप में जोड़ा गया - गति वृद्धि ने सुझाव दिया कि मुझे संकलन बॉक्स को एसएसडी में बदलना चाहिए। आपकी टिप्पणी के बाद, मैं निश्चित रूप से परिवर्तन कर दूंगा, एक बार क्षमता थोड़ा अधिक/कीमत थोड़ी सस्ता हो जाएगी। – kfmfe04

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