c++ मेमोरी फ्रैग्मेंटेशन प्रोफाइलर




memory-management heap-fragmentation (4)

मुझे यह समझने में परेशानी है कि आपके कस्टम मेमोरी प्रबंधन के सेगमेंट डेटा संरचनाओं को समझने के लिए आपके पास कोई टूल कैसे होगा। आप व्यस्त वितरण (मॉलोक / फ्री में हुकिंग) प्राप्त कर सकते हैं, लेकिन मुफ्त वितरण (जो अनिवार्य रूप से विखंडन है) हवा में दिखाई देते हैं।

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

जैसे हिस्टोग्राम बिन अंतराल

[2 ^ एन, 2 ^ (एन + 1)) ...

(उदाहरण के लिए यदि आप चाहते हैं कि फाइनेंडर डिब्बे लॉग बेस वर्ग रूट 2 (आकार) का उपयोग करें जो कि x86 [बिट स्कैन, तुलना, सेट, जोड़] पर 4 पूर्णांक निर्देशों के साथ गणना की जा सकती है)

उपयोग करने योग्य बिन आकारों का दूसरा सेट निम्न खुले अंतराल हैं

[2 ^ एन, 2 ^ एन + 2 ^ (एन -1)), [2 ^ एन + 2 ^ (एन -1), 2 ^ (एन + 1)) ...

फिर आसानी से गणना [बिट स्कैन, बदलाव, और, जोड़])

क्या कोई अच्छा स्मृति विखंडन profilers हैं? (लिनक्स जीसीसी संस्करण अच्छा होगा) Valgrind इस का विश्लेषण नहीं कर सकता क्योंकि यह कस्टम मॉलोक / फ्री फ़ंक्शन का उपयोग करता है।

धन्यवाद, एंड्रयू


मैं mtrace से शुरू होगा जब आपके पास कोई ट्रेस होता है, तो glibc एक पर्ल स्क्रिप्ट mtrace (1) के साथ आता है जो लीक पाता है हालांकि, ट्रेस प्रारूप को समझना आसान है, इसलिए यह सीधे-आगे की प्रक्रिया होनी चाहिए ताकि यह विखंडन विश्लेषण में हो।


nedmalloc एक बहुत अच्छा कस्टम आवंटन है, स्रोत के साथ आता है, जो विखंडन से बचने के लिए अनुकूलित है।

मैं उस प्लग को प्लग इन करूँगा, और विखंडन के आँकड़ों के लिए अपने आंतरिक प्रवेश को देखना शुरू करूँगा


मुझे डर है कि वालग्रिंड का जवाब है

आप Valgrind को बता सकते हैं कि आवंटन बनाने के लिए कौन से फ़ंक्शन का उपयोग किया जाता है और यह कैसे वैग्रिंड एक्सटेंशन को कोड में उपयोग करता है (ताकि आपको अपने एप्लिकेशन को संशोधित और पुनः कंपाइल करने की आवश्यकता है, लेकिन यदि आप डिबगिंग नहीं कर रहे हैं, तो परिवर्तनों को संकलित करना), विवरण Valgrind मैनुअल मेमोरी पूल: कस्टम आवंटियों के साथ काम करना

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

मैसिफ "एक ढेर प्रोफाइलर है यह आपके कार्यक्रम का उपयोग करता है कितना हेप मेमोरी को मापता है। इसमें उपयोगी स्थान और पुस्तक-रखरखाव और संरेखण उद्देश्यों के लिए आवंटित अतिरिक्त बाइट्स शामिल हैं.यह आपके प्रोग्राम के स्टैक के आकार को भी माप सकता है, , हालांकि यह डिफ़ॉल्ट रूप से ऐसा नहीं करता है। "

यह "ग्राफ" बना सकता है, इसलिए यह एक प्रकार की ग्राफिकल है:

19.63^                                               ###                      
     |                                               #                        
     |                                               #  ::                    
     |                                               #  : :::                 
     |                                      :::::::::#  : :  ::               
     |                                      :        #  : :  : ::             
     |                                      :        #  : :  : : :::          
     |                                      :        #  : :  : : :  ::        
     |                            :::::::::::        #  : :  : : :  : :::     
     |                            :         :        #  : :  : : :  : :  ::   
     |                        :::::         :        #  : :  : : :  : :  : :: 
     |                     @@@:   :         :        #  : :  : : :  : :  : : @
     |                   ::@  :   :         :        #  : :  : : :  : :  : : @
     |                :::: @  :   :         :        #  : :  : : :  : :  : : @
     |              :::  : @  :   :         :        #  : :  : : :  : :  : : @
     |            ::: :  : @  :   :         :        #  : :  : : :  : :  : : @
     |         :::: : :  : @  :   :         :        #  : :  : : :  : :  : : @
     |       :::  : : :  : @  :   :         :        #  : :  : : :  : :  : : @
     |    :::: :  : : :  : @  :   :         :        #  : :  : : :  : :  : : @
     |  :::  : :  : : :  : @  :   :         :        #  : :  : : :  : :  : : @
   0 +----------------------------------------------------------------------->KB     0                                                                   29.48

Number of snapshots: 25
 Detailed snapshots: [9, 14 (peak), 24]

क्या अधिक है, वहाँ वास्तव में सुंदर ग्राफ पैदा करता है कि एक माहिर विजुअलाइज़र है

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







heap-fragmentation