मुझे लगता है कि कई स्थैतिक विश्लेषण टूल आपको जो कुछ भी चाहिए, वह आपको नहीं दे सकते हैं क्योंकि वे आवश्यक रूप से टेम्पलेट तत्काल, हेडर समावेशन (जैसे उन सहित) precompiled हेडर द्वारा खींचा) और संकलक की कोड पीढ़ी विशेषताओं।
मुझे अतीत में एक समान समस्या का सामना करना पड़ा है, जिसमें एक बड़े निष्पादन योग्य के आकार का आकार किसी विशेष पुस्तकालय का प्रभुत्व था। जिस तरह से मैं इसके नीचे गया था बस प्रत्येक .cpp के लिए ऑब्जेक्ट फ़ाइलों के आकार को देखने के लिए था। यह आपको पूरी कहानी नहीं देगा क्योंकि लिंकर अप्रयुक्त हिस्सों को अनुकूलित करेगा (हालांकि यह देखने लायक है कि आपको विजुअल स्टूडियो के लिए यह विकल्प सेट - /OPT:REF
मिला है)। हालांकि यह आपको अपनी खोज पर ध्यान केंद्रित करने की अनुमति देगा। दो या तीन सबसे बड़ी ऑब्जेक्ट फ़ाइलों को ढूंढें और फिर संबंधित .cpp फ़ाइलों को देखें। इसके बाद आपको दो विकल्प मिल गए हैं - एक स्क्रिप्ट लिखें जो objdump
(विजुअलस्टूडियो) या nm -C
(gcc) का आउटपुट लेती है जहां आप मॉड्यूल में प्रत्येक फ़ंक्शन के ऑफसेट निकाल सकते हैं, ताकि आप प्रत्येक के साथ पिछले विचार को अलग कर सकें प्रत्येक समारोह के आकार का।
या सबसे आसान तरीका सिर्फ सीपीपी फ़ाइल पर बाइनरी खोज का उपयोग करना है। # समाप्ति के बाद के बाद सभी कोड को #ifdef बाहर करें और संकलित करें। इससे आपको शामिल करने के ऊपरी हिस्से का एक विचार मिलेगा (यदि वह स्वयं बड़ा है तो आप सबसे ज्यादा योगदान करने के लिए हेडर समावेशन में ड्रिल कर सकते हैं)। इसके बाद, प्रत्येक आधे कोड को #ifdef के साथ अक्षम करें और पता लगाएं कि कौन सा आधा बड़ा है। इस विधि का उपयोग करके आप उन कार्यों को तुरंत पा सकते हैं जो लाइब्रेरी के आकार में सबसे अधिक योगदान करते हैं।
लाइब्रेरी के मामले में मुझे यह समस्या थी, कारण एक बहुत बड़ा टेम्पलेटेड फ़ंक्शन बन गया जो हर बार एक सदस्य चर सहेजा गया था। उस मामले में समाधान फ़ंक्शन को ठोस बनाना था ताकि सभी कोड जिन्हें टाइप-विशिष्ट व्यवहार की आवश्यकता नहीं होती है केवल एक बार तत्काल हो जाती है, और टेम्पलेट फ़ंक्शंस को तर्क-आधारित के तर्क के बिट्स के लिए स्थानीयकृत किया जाता है।
स्रोत
2012-07-30 08:37:36
मुझे संदेह है कि यह मौजूदा उपकरणों के साथ संभव है या नहीं। – iammilind
क्लैंग विभिन्न स्रोत-स्तर के उपकरण लिखने के लिए स्वच्छ आधारभूत संरचना प्रदान करता है। आप इसका अपना टूल विकसित करने के लिए इसका उपयोग कर सकते हैं। – arrowd
यदि आप ऑप्टिमाइज़ेशन – Zaffy