जैसा कि लोगों ने इंगित किया है - जीसी आवंटित करने के लिए तेज़ है (क्योंकि यह आपको इसकी सूची में अगला ब्लॉक देता है), लेकिन कुल मिलाकर धीमा है (क्योंकि इसे कॉम्पैक्ट करना है) आवंटन तेजी से होने के क्रम में नियमित रूप से ढेर)।
तो - समझौता समाधान के लिए जाना (जो वास्तव में बहुत बहुत अच्छी है):
आप अपनी खुद की ढेर, आप आम तौर पर आवंटित वस्तु के प्रत्येक आकार के लिए एक (या बनाने के 4 बाइट, 8 बाइट, 16- बाइट, 32-बाइट, इत्यादि) फिर, जब आप स्मृति का एक नया टुकड़ा चाहते हैं तो आप उपयुक्त ढेर पर अंतिम 'ब्लॉक' पकड़ लेंगे। चूंकि आप इन ढेर से पूर्व-आवंटित करते हैं, इसलिए आवंटित होने पर आपको केवल अगली नि: शुल्क ब्लॉक पकड़नी होगी। यह मानक आवंटन से बेहतर काम करता है क्योंकि आप खुशी से स्मृति बर्बाद कर रहे हैं - यदि आप 12 बाइट आवंटित करना चाहते हैं, तो आप 16-बाइट ढेर से एक संपूर्ण 16 बाइट ब्लॉक छोड़ देंगे। आप प्रयुक्त वी मुक्त ब्लॉकों का बिटमैप रखते हैं ताकि आप स्मृति के भार को बर्बाद किए बिना या कॉम्पैक्ट की आवश्यकता के बिना तुरंत आवंटित कर सकें।
इसके अलावा, क्योंकि आप कई ढेर चला रहे हैं, अत्यधिक समानांतर सिस्टम बहुत बेहतर काम करते हैं क्योंकि आपको अक्सर लॉक करने की आवश्यकता नहीं होती है (यानी आपके पास प्रत्येक ढेर के लिए कई ताले हैं ताकि आपको लगभग उतना ही विवाद न हो)
इसे आज़माएं - हमने इसे मानक ढेर को बहुत गहन अनुप्रयोग पर बदलने के लिए उपयोग किया, प्रदर्शन काफी बढ़ गया।
बीटीडब्ल्यू। मानक आवंटकों धीमा होने का कारण यह है कि वे स्मृति को बर्बाद न करने का प्रयास करते हैं - इसलिए यदि आप मानक ढेर से 5 बाइट, 7 बाइट और 32 बाइट आवंटित करते हैं, तो यह उन 'सीमाओं' को बनाए रखेगा। अगली बार आपको आवंटित करने की आवश्यकता है, यह उन लोगों के माध्यम से चलेगा जो आपको पर्याप्त जानकारी देने के लिए पर्याप्त जगह की तलाश में हैं। यह कम-मेमोरी सिस्टम के लिए अच्छा काम करता है, लेकिन आपको केवल यह देखना होगा कि अधिकांश ऐप्स आज कितने मेमोरी का उपयोग करते हैं यह देखने के लिए कि जीसी सिस्टम दूसरी तरफ जाते हैं, और यथासंभव तेज़ी से आवंटन करने की कोशिश करते हैं, जबकि स्मृति की कितनी मेमोरी है व्यर्थ।
क्या आप कह रहे हैं कि यह सब * भाषा *, सी या सी ++ के आधार पर होगा, कोई उपयोग करता है? चूंकि इनमें से किसी भी भाषा में, किसी को जीसी स्वयं को लागू करना है, मुझे लगता है कि प्रति प्रतिरूप भिन्नता नहीं है, केवल प्रति एल्गोरिदम भिन्नता है। –
पूरी तरह से सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं। लेकिन, एक ही स्मृति प्रबंधन एल्गोरिदम दोनों भाषाओं पर लागू किया जा सकता है। हालांकि सी ++ में आप ऑपरेटर को ओवरराइड करने की तरह कुछ करेंगे और इसे लागू करने के लिए हटा देंगे। सी में मुझे यकीन नहीं है; संभवतः अपने कार्यों का नाम दें और सभी आवंटन के लिए उनका उपयोग सुनिश्चित करें। –