ए सी ++ प्रोग्राम जो कई डीएलएल और क्यूटी का उपयोग करता है, को मॉलोक प्रतिस्थापन (tcmalloc) से लैस किया जाना चाहिए जो प्रदर्शन समस्याओं के लिए विंडोज मैलोक के कारण सत्यापित किया जा सकता है। लिनक्स के साथ, वहाँ कोई समस्या नहीं है, लेकिन खिड़कियों के साथ, वहाँ कई तरीके हैं, और मैं अपील कर उनमें से कोई भी पाते हैं:विंडोज मॉलोक प्रतिस्थापन (उदा।, टीसीएमएलओसी) और गतिशील सीआरटी
1. lib में नए malloc रखो और लिंक करने के लिए सुनिश्चित करें कि यह पहली बार (Other SO-question)
इसका नुकसान है, उदाहरण के लिए strdup will still use the old malloc and a free may crash the program। lib.exe के साथ स्थिर libcrt पुस्तकालय से
2. हटाएँ malloc (क्रोम)
यह परीक्षण किया जाता है/chrome/chromium के लिए इस्तेमाल किया (?), लेकिन नुकसान यह है कि यह सिर्फ स्थिर CRT जोड़ने के साथ काम करता है । स्टेटिक लिंकिंग में समस्या है यदि एक सिस्टम लाइब्रेरी msvcrt के खिलाफ गतिशील रूप से जुड़ा हुआ है तो mismatches in the heap allocation/deallocation हो सकता है। अगर मैं इसे सही ढंग से समझता हूं, तो tcmalloc को गतिशील रूप से जोड़ा जा सकता है कि सभी स्वयं संकलित डीएलएस (जो अच्छा है) के लिए एक आम ढेर है।
3. पैच CRT-स्रोत कोड (फ़ायरफ़ॉक्स)
Firefox's jemalloc जाहिरा तौर पर खिड़कियों सीआरटी स्रोत कोड पैच और एक नया CRT बनाता है। यह फिर से स्थिर/गतिशील लिंकिंग समस्या है।
कोई गतिशील एमएसवीसीआरटी उत्पन्न करने के लिए इसका उपयोग करने के बारे में सोच सकता है, लेकिन मुझे लगता है कि यह संभव नहीं है, क्योंकि लाइसेंस एक ही नाम के साथ एक पैच किए गए एमएसवीसीआरटी प्रदान करने से मना करता है।
4. गतिशील रूप से चलाने के लिए समय
कुछ वाणिज्यिक स्मृति allocators इस तरह के जादू कर सकते हैं पर लोड सीआरटी पैचिंग। tcmalloc भी कर सकते हैं, लेकिन यह बदसूरत लगता है। इसमें कुछ समस्याएं थीं, लेकिन उन्हें ठीक कर दिया गया है। वर्तमान में, tcmalloc के साथ यह 64 बिट विंडोज़ के तहत काम नहीं करता है।
क्या बेहतर दृष्टिकोण हैं? कोई टिप्पणी?
तो आपने किस दृष्टिकोण का उपयोग किया? सीआरटी मॉलोक के साथ प्रदान किए गए एक से वैकल्पिक आवंटक बेहतर काम करने वाले इस धारणा को सत्यापित करने के लिए आपने किस का उपयोग किया था? सीआरटी का कौन सा संस्करण आपने उपयोग किया था और क्या यह बेहतर/बदतर/नए संस्करणों के समान है? –
वैश्विक सी ++ नए को बदलने का प्रयास क्यों न करें? क्या वह काम नहीं करेगा (और एक साझा lib सेटअप के रूप में साझा libs + ऐप मुख्य बाइनरी + एमएस सीआरटी मैच)? – mlvljr