2009-08-09 18 views
11

गतिशील आवंटित वस्तुओं पर ऑब्जेक्ट पूल को कब प्राथमिकता देना चाहिए?ऑब्जेक्ट पूल बनाम गतिशील आवंटन

मुझे प्रति सेकंड हजारों ऑब्जेक्ट्स बनाने और नष्ट करने की आवश्यकता है। क्या यह ऑब्जेक्ट पूल के पक्ष में निर्णय लेने के लिए पर्याप्त है?

धन्यवाद।

+0

सामान्य रूप से - यह निर्भर करता है। और यदि आप किसी ऑब्जेक्ट पूल का उपयोग कर सकते हैं, तो आपको स्पष्ट रूप से चीजों को बनाने और नष्ट करने की "आवश्यकता" नहीं है। तो हमें और अधिक जानकारी चाहिए। –

उत्तर

7

वस्तु, विध्वंस, आवंटन और निर्माण को नष्ट करने की अपेक्षित लागत एक नए उपयोग के लिए पुन: प्रारंभ करने की लागत से अधिक है।

+3

मैं कहूंगा कि "कम हो सकता है" - यह पूरी तरह से संभव है (यहां तक ​​कि संभवतः) प्रारंभिकता महंगी चरण है। –

+0

मैंने अपना जवाब सुधार दिया। अन्य उत्तरों को पढ़ना, ऐसा लगता है कि मैं ऑब्जेक्ट पूल (जहां कोई उपयोग के लिए निर्मित वस्तुओं की एक सूची रखता है) और मेमोरी पूल (जो एक मेमोरी मैनेजमेंट तकनीक है, जहां एक डेलोकेशन में देरी करता है) के बीच एक अंतर बना रहा है - और कभी-कभी विनाश, कभी-कभी विनाश पूरी तरह से नहीं किया जाता है - ताकि यह एक कदम में किया जा सके)। – AProgrammer

+0

मुझे यकीन नहीं है कि मैं समझता हूं कि आप यहां क्या कह रहे हैं। मैंने हमेशा सोचा कि ऑब्जेक्ट पूल का लाभ केवल स्मृति पुन: उपयोग था? सभी नई वस्तुओं का निर्माण करने की जरूरत है और सभी पुरानी वस्तुओं को वैसे भी नष्ट कर दिया गया है - आप उस समय बचा नहीं सकते? –

3

आम तौर पर यदि आप हजारों वस्तुओं को एक सेकंड बना रहे हैं और नष्ट कर रहे हैं तो आपको कम से कम एक ऑब्जेक्ट पूल का उपयोग करना चाहिए।

आप एक कस्टम आवंटक का उपयोग कर सकते हैं जो पूरी तरह से एक विशिष्ट आकार की वस्तुओं को आवंटित करता है। विशेष रूप से अपनी वस्तुओं के लिए एक ढेर को आवंटित करें और पूर्व को ओवरराइड करें। थोड़ा सा क्षेत्र और एक सरणी का उपयोग करना अपेक्षाकृत सरल है।

मूल रूप से एक कस्टम ढेर अधिक स्मृति कुशल होता है यदि ऑब्जेक्ट छोटे होते हैं (ढेर ओवरहेड छोटे ऑब्जेक्ट आकार के सापेक्ष काफी अधिक होता है); यह तेज है; यह ढेर विखंडन रोकता है; और डीबग करना आसान है।

8

हां, यह ऑब्जेक्ट पूल के पक्ष में निर्णय लेने के लिए पर्याप्त है।

का हवाला देते हुए बूस्ट प्रलेखन

मैं पूल का उपयोग कब करना चाहिए?

पूल आमतौर पर उपयोग किए जाते हैं जब बहुत सारी आवंटन और 0-छोटी वस्तुओं के वितरण के दौरान उपयोग किया जाता है। एक और आम उपयोग ऊपर की स्थिति है, जहां कई वस्तुओं को स्मृति से बाहर किया जा सकता है।

देखें Boost Pool पुस्तकालय

7

उपाय, उपाय, उपाय। फिर आप देखेंगे, और आपको अटकलों या दिशानिर्देशों पर भरोसा नहीं करना पड़ेगा।

इसके अलावा, यदि डिर्क ग्रुनवाल्ड का CustomMalloc अभी भी उपलब्ध है, तो इसे आज़माएं। यह malloc के कार्यान्वयन को संश्लेषित करता है जो एक ही अनुप्रयोग की आवश्यकताओं के अनुरूप है।

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