2013-07-25 9 views
8

सी ++ और मानक पुस्तकालय पर किताबें पढ़ने के दौरान, मुझे आवंटकों के लगातार संदर्भ दिखाई देते हैं।आवंटकों क्या हैं और उनका उपयोग कब आवश्यक है?

उदाहरण के लिए, निकोलाई Josuttis के सी ++ स्टैंडर्ड लाइब्रेरी पिछले अध्याय में विस्तार से चर्चा करता है उन्हें और ये दोनों आइटम 10 और 11 ("समझ में वैध कस्टम का उपयोग करता है (" allocators 'सम्मेलनों & प्रतिबंध के बारे में पता होना ") आवंटकों ") स्कॉट मेयर्स के में प्रभावी एसटीएल उनके उपयोग के बारे में हैं।

मेरा सवाल यह है कि आवंटक एक विशेष मेमोरी मॉडल का प्रतिनिधित्व कैसे करते हैं? क्या डिफ़ॉल्ट एसटीएल मेमोरी प्रबंधन पर्याप्त नहीं है? इसके बजाय आवंटकों का उपयोग कब किया जाना चाहिए?

यदि संभव हो, तो कृपया एक साधारण मेमोरी मॉडल उदाहरण के साथ समझाएं।

+0

संभावित रूप से संबंधित: [कस्टम सी ++ एसटीएल आवंटकों के आकर्षक उदाहरण?] (Http://stackoverflow.com/q/826569) –

उत्तर

8

एक आवंटक कच्ची मेमोरी आवंटित करने और उस स्मृति में ऑब्जेक्ट्स को नष्ट/नष्ट करने का सार तत्व बनाता है।

ज्यादातर मामलों में, डिफ़ॉल्ट आवंटक पूरी तरह से ठीक है। कुछ मामलों में, हालांकि, आप इसे किसी और चीज़ से बदलकर दक्षता बढ़ा सकते हैं। क्लासिक उदाहरण तब होता है जब आपको बहुत छोटी वस्तुओं की आवंटित करने की आवश्यकता होती है। उदाहरण के लिए, तारों का एक वेक्टर पर विचार करें जो प्रत्येक केवल एक दर्जन बाइट्स हो सकता है। सामान्य आवंटक operator new का उपयोग करता है, जो ऐसी छोटी वस्तुओं के लिए बहुत अधिक ऊपरी ओवरहेड लगा सकता है। एक कस्टम आवंटक बनाना जो स्मृति के बड़े हिस्से को आवंटित करता है, फिर आवश्यकतानुसार इसे उप-विभाजित करता है, स्मृति और समय दोनों को काफी बचा सकता है।

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