मैं लिनक्स पर एक mingw32 क्रॉस कंपाइलर का उपयोग करके, एक विशेष रूप से बड़ी फ़ाइल (~ 15 के लाइन) सहित कई ऑटो-जेनरेट कोड बना रहा हूं। अधिकांश फ़ाइलें बेहद तेज़ होती हैं, लेकिन यह एक बड़ी फ़ाइल संकलित करने के लिए अप्रत्याशित रूप से लंबे समय तक (~ 15 मिनट) लेती है।मुझे कैसे पता चलेगा कि g ++ किसी विशेष फ़ाइल पर बहुत लंबा समय क्यों लेता है?
मैंने विभिन्न अनुकूलन झंडे में हेरफेर करने की कोशिश की है ताकि यह देखने के लिए कि उनके पास कोई भाग्य है, बिना किसी किस्मत के। मुझे वास्तव में क्या चाहिए यह निर्धारित करने का कोई तरीका है कि जी ++ क्या कर रहा है जो इतना समय ले रहा है। क्या संकलन के विभिन्न चरणों के बारे में g ++ उत्पन्न करने के लिए कोई (अपेक्षाकृत सरल) तरीका है, जिससे मुझे लटकने की समस्या को कम करने में मदद मिलती है?
अफसोस की बात है कि मेरे पास इस क्रॉस-कंपाइलर को पुनर्निर्माण करने की क्षमता नहीं है, इसलिए कंपाइलर को डिबगिंग जानकारी जोड़ना और इसके माध्यम से कदम उठाना एक संभावना नहीं है।
क्या फाइल में है:
- का एक समूह
- स्ट्रिंग तुलना
- if-then चेक और निर्माता आमंत्रण
फ़ाइल एक है के एक समूह का एक समूह भी शामिल है एक निश्चित माता-पिता वर्ग के विभिन्न विशिष्ट उप-वर्गों का एक टन उत्पादन करने के लिए कारखाना। हालांकि, इनमें से अधिकांश में बहुत ही फैंसी नहीं है।
-ftime-रिपोर्ट के परिणाम के रूप में नील बटरवर्थ ने सुझाव दिया, संकेत मिलता है कि "जीवन विश्लेषण" चरण 921 सेकंड है, जो 15 मिनट के सबसे तक ले जाता है ले जा रहा है।
ऐसा प्रतीत होता है कि यह डेटा प्रवाह विश्लेषण के दौरान होता है। फाइल स्वयं सशर्त स्ट्रिंग तुलना का एक गुच्छा है, एक स्ट्रिंग के रूप में प्रदान किए गए वर्ग नाम से ऑब्जेक्ट का निर्माण।
हमें लगता है कि फ़ंक्शन पॉइंटर्स के नामों के मानचित्र में इंगित करने के लिए इसे बदलना कुछ चीजों को बेहतर बना सकता है, इसलिए हम इसे आजमा सकते हैं।
दरअसल, कारखाने कार्यों का एक गुच्छा (वस्तु के अनुसार) पैदा करने और के बारे में 25 सेकंड के लिए मूल 15 मिनट से अपने कारखाने समारोह कम संकलन समय के लिए सूचक को वस्तु की स्ट्रिंग नाम से एक नक्शा बनाने, जो हर किसी को अपने निर्माण पर बहुत समय बचाएगा।
बार-बार-रिपोर्ट के बारे में टिप के लिए नील बटरवर्थ को धन्यवाद।
इस पर एक नज़र डालें: http: //stackoverflow.com/questions/318398/why-does-c-compilation-take-so-long –
क्या आप हमें बता सकते हैं कि फ़ाइल में क्या है? इनलाइन फ़ंक्शन? Enums? परिभाषित करता है? शामिल है और मैक्रो सूचियां? उनमें से कितने? – Coincoin
यदि आप स्थानीय कंपाइलर का उपयोग करते हैं तो क्या आपको वही समस्या मिलती है? यदि ऐसा है, तो आप यह सुनिश्चित कर सकते हैं कि प्रोफाइल कहां खर्च किया गया है, यह देखने के लिए सक्षम प्रोफाइलिंग के साथ। –