2009-02-23 11 views
7

मैं एक बड़ी सी ++ परियोजना (वीसी 6) के लिए एक लिंकर मानचित्र फ़ाइल का विश्लेषण करने के लिए सरल बनाने के लिए एक उपकरण की तलाश में हूं।एमएपी फ़ाइल विश्लेषण - मेरा कोड आकार कहां से आता है?

रखरखाव के दौरान, द्विआधारी तेजी से बढ़ती हैं और मैं यह जानना चाहता हूं कि यह कहां से आता है। मुझे विभिन्न डीएलएल के बीच साझा लाइब्रेरी में कुछ अति उत्साही टेम्पलेट विस्तार पर संदेह है, लेकिन मानचित्र फ़ाइल को ब्राउज़ करने के लिए jsut अच्छा संकेत नहीं देता है।

कोई सुझाव?

उत्तर

6

This एक अद्भुत संकलक उत्पन्न नक्शा फ़ाइल विश्लेषण/एक्सप्लोरर/दर्शक उपकरण है। जांचें कि क्या आप जीसीसी जेनरेट की गई मानचित्र फ़ाइल का पता लगा सकते हैं।

amap: विश्लेषण करने के लिए एक उपकरण 32-बिट विजुअल स्टूडियो कंपाइलर द्वारा उत्पादित एमएपी फाइलें और डेटा और कोड द्वारा उपयोग की जाने वाली मेमोरी की मात्रा की रिपोर्ट करें। यह ऐप Xbox360, Wii, और PS3 कंपाइलर्स द्वारा उत्पादित एमएपी फ़ाइलों को भी पढ़ और विश्लेषण कर सकता है।

+0

की जांच करने वाली पहली चीजें हैं - उत्तर या कम जो मैं ढूंढ रहा था :) – peterchen

+0

यह आश्चर्यजनक है! – Boinst

1

किसी उपकरण के लिए कोई सुझाव नहीं, लेकिन एक संभावित कारण के रूप में अनुमान: क्या आपके पास वृद्धिशील लिंकिंग सक्षम है? इससे बाद के निर्माण के दौरान विस्तार हो सकता है ...

यदि आप इसका उपयोग कर रहे हैं/ऑप्ट: रेफरी कर रहे हैं तो लिंकर अप्रयुक्त प्रतीकों को पट्टी करेगा, इसलिए यदि आप इसका उपयोग कर रहे हैं और वृद्धिशील लिंकिंग का उपयोग नहीं कर रहे हैं, तो मैं उम्मीद करता हूं कि बाइनरी केवल वास्तविक नए कोड को जोड़ने का नतीजा है। जहां तक ​​मुझे पता है ... उम्मीद है कि यह थोड़ा सा मदद करता है।

+0

/ऑप्ट: रेफ सक्षम है, रिलीज बिल्ड (जो प्रभावित है) के लिए वृद्धिशील लिंकिंग अक्षम है, लेकिन हाँ, यह – peterchen

2

मानचित्र फ़ाइल में प्रत्येक अनुभाग का आकार होना चाहिए, आप इस आकार से प्रतीकों को सॉर्ट करने के लिए एक त्वरित टूल लिख सकते हैं। एक कमांड लाइन उपकरण भी है जो MSVC (undname.exe) के साथ आता है जिसका उपयोग आप प्रतीकों को ध्वस्त करने के लिए कर सकते हैं।

एक बार जब आपके आकार के अनुसार क्रमबद्ध प्रतीक होते हैं, तो आप इस साप्ताहिक या दैनिक को अपनी पसंद के अनुसार उत्पन्न कर सकते हैं और तुलना कर सकते हैं कि समय के साथ प्रत्येक प्रतीक का आकार कैसे बदल गया है।

किसी भी एकल निर्माण से अकेले मानचित्र फ़ाइल बहुत कुछ नहीं बता सकती है, लेकिन संकलित नक्शा फ़ाइलों की ऐतिहासिक रिपोर्ट आपको थोड़ा सा बता सकती है।

2

क्या आपने अपनी .obj फ़ाइलों पर dumpbin.exe का उपयोग करने का प्रयास किया है?

सामग्री देखने के लिए:

  • एसटीएल का एक बहुत का उपयोग?
  • इनलाइन तरीकों के साथ बहुत सी सी ++ कक्षाएं?
  • बहुत सारे स्थिरांक?

यदि उपरोक्त में से कोई भी आपके लिए लागू होता है। जांचें कि उनके पास व्यापक दृश्यता है, यानी यदि वे आपके आवेदन के बड़े हिस्सों में उपयोग/देखे जाते हैं।

-1

टेम्पलेट्स, मैक्रोज़, एसटीएल सामान्य रूप से सभी जगहों की जबरदस्त मात्रा का उपयोग करते हैं। एक महान सार्वभौमिक पुस्तकालय के रूप में घोषित, बूस्ट परियोजनाओं में ज्यादा जगह जोड़ता है। BOOST_FOR_EACH इसका एक उदाहरण है। इसकी सैकड़ों लाइनों को टेम्पलेट कोड, जिसे उचित लूप हैंडल लिखकर आसानी से बचाया जा सकता है, जो सामान्य रूप से केवल कुछ और महत्वपूर्ण स्ट्रोक होता है।

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

इसके अलावा, यदि आप कर सकते हैं, तो डीएलएल आर्किटेक्चर से सभी को एक निष्पादन योग्य में स्थिर रूप से जोड़ने के लिए अलग-अलग "मोड" में चलते हैं। वही निष्पादन योग्य छवि का उपयोग करने में बिल्कुल कुछ भी गलत नहीं है जितना आप चाहते हैं कि आप बस एक अलग कमांड लाइन पैरामीटर में गुजरना चाहते हैं, जो आप चाहते हैं।

डीएलएल अंतरिक्ष को बर्बाद करने और एक परियोजना के चल रहे समय को धीमा करने के लिए सबसे खराब अपराधी हैं। लोग सोचते हैं कि वे स्पेस सेवर हैं, वास्तव में जब वे विपरीत प्रभाव डालते हैं, कभी-कभी परियोजना के आकार को दस गुना बढ़ाते हैं! इसके अलावा वे स्वैपिंग बढ़ाते हैं। प्रदर्शन के लिए निश्चित कोड अनुभाग (कोई स्थानांतरण स्थान) का उपयोग करें।

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