अधिक जानने के बिना आपको एक अच्छा जवाब देना असंभव है, लेकिन हां, अपनी याददाश्त का प्रबंधन करना (अक्सर एक बड़े ब्लॉक को आवंटित करके और फिर उस बड़े ब्लॉक में अपने आवंटन करके) सामान्य से जुड़ी उच्च लागत से बच सकते हैं उद्देश्य स्मृति प्रबंधकों। उदाहरण के लिए, विंडोज़ में कई छोटे आवंटन घुटनों पर प्रदर्शन लाएंगे। मौजूदा कार्यान्वयन लगभग हर प्रकार के मेमोरी मैनेजर के लिए मौजूद हैं, लेकिन मुझे यकीन नहीं है कि आप किस तरह से पूछ रहे हैं ...
जब विंडोज़ में प्रोग्रामिंग मुझे लगता है कि कॉलिंग मॉलोक/फ्री प्रदर्शन के लिए मौत की तरह है - लगभग किसी भी इन-एप मेमोरी आवंटन जो बैचिंग द्वारा मेमोरी आवंटन को कम करता है, आपको आवंटित/मुक्त करने पर प्रोसेसर समय के gobs को बचाएगा, इसलिए जब तक आप डिफ़ॉल्ट आवंटन नहीं कह रहे हैं, तब तक यह आपके लिए उपयोग करने के लिए इतना महत्वपूर्ण नहीं हो सकता है।
कहा जा रहा है, यहाँ कुछ साधारण बहु सूत्रण अनुभवहीन विचारों है:
This सख्ती से एक स्लैब प्रबंधक नहीं है, लेकिन यह एक अच्छा संतुलन हासिल करने लगता है और आमतौर पर इस्तेमाल किया जाता है।
मुझे व्यक्तिगत रूप से लगता है कि मैं अक्सर एक ही आकार के मेमोरी ब्लॉक के लिए एक साधारण सरल-से-लागू स्मृति-पुन: उपयोग प्रबंधक का उपयोग करके समाप्त होता हूं - यह एक निश्चित आकार की अप्रयुक्त स्मृति की एक लिंक की गई सूची बनाए रखता है और एक नया ब्लॉक आवंटित करता है मेमोरी जब इसकी जरूरत है। चाल यहां अप्रयुक्त स्मृति ब्लॉक में लिंक्ड सूची के लिए पॉइंटर्स को स्टोर करना है - इस तरह चार बाइट्स का एक बहुत छोटा ओवरहेड है। पूरी प्रक्रिया ओ (1) है जब भी यह स्मृति का पुन: उपयोग कर रहा है। जब इसे स्मृति आवंटित करना होता है तो यह एक स्लैब आवंटक (जो स्वयं छोटा होता है) कहते हैं।
शुद्ध आवंटन-केवल स्लैब आवंटक के लिए आप केवल सिस्टम (अच्छी तरह से) से आपको स्मृति का एक बड़ा हिस्सा देने और ट्रैक रखने के लिए कहते हैं आपने अभी तक किस स्थान का उपयोग नहीं किया है (केवल अप्रयुक्त क्षेत्र की शुरुआत में एक सूचक और अंत में एक सूचक) बनाए रखें। जब आपके पास अनुरोधित आकार आवंटित करने के लिए पर्याप्त स्थान नहीं है, तो एक नया स्लैब आवंटित करें। (बड़े हिस्सों के लिए, बस सिस्टम आवंटक से गुजरें।)
इन दृष्टिकोणों को चेन करने में समस्या? आपका एप्लिकेशन कभी भी किसी भी मेमोरी को मुक्त नहीं करेगा, लेकिन प्रदर्शन-महत्वपूर्ण अनुप्रयोग अक्सर एक-शॉट प्रसंस्करण अनुप्रयोग होते हैं या एक ही आकार की कई वस्तुएं बनाते हैं और फिर उनका उपयोग बंद कर देते हैं।
यदि आप सावधान हैं, तो उपर्युक्त दृष्टिकोण केवल परमाणु संचालन के साथ मल्टीथ्रेड अनुकूल बनाने के लिए बहुत कठिन नहीं है।
मेरा पता लगाएं: https://github.com/bbu/Userland-slab-allocator :-) –
@BlagovestBuyukliev: धन्यवाद, अगर मैं अपना स्वयं का एसएलबी लागू करूंगा तो यह बहुत उपयोगी होगा। कुछ विचार घुसपैठ कर रहे हैं, और मैं स्मृति प्रबंधन में इतना मजबूत नहीं हूं इसलिए यह सहायक होगा। स्मृति प्रबंधन को पहचानने के लिए –
+1 कठिन है और मौजूदा कार्यान्वयन के लिए पूछ रहा है। –