हम वस्तुओं अवधि और termsMap द्वारा स्मृति का उपयोग किया ( बाइट में) कैसे पा सकते हैं। क्या हमारे पास कोई पुस्तकालय है?
आपको अपने स्वयं के आवंटक प्रकार का उपयोग करना चाहिए।
typedef std::set<string,
your_allocator_1_that_can_count_memory_consumption_t> Terms;
typedef std::map<string, std::pair<int,Terms>,
your_allocator_2_that_can_count_memory_consumption_t> TermMap;
typedef std::multimap<int, string, greater<int>,
your_allocator_3_that_can_count_memory_consumption_t> TermsMap;
मैं अभी तक std :: स्ट्रिंग के लिए इस विचार की जाँच नहीं की है, इसलिए यदि यह सिर्फ अपने स्वयं के वर्ग fixed_string जो सिर्फ चार रों [अधिकतम स्ट्रिंग-लंबाई] लपेटता का उपयोग लागू करने के लिए मुश्किल है।
और जब आप अपने कार्यक्रम में की जरूरत स्मृति की खपत पता लगाने के लिए सिर्फ your_allocator_1_that_can_counts_memory_consumption_t
, your_allocator_2_that_can_counts_memory_consumption_t
, your_allocator_3_that_can_counts_memory_consumption_t
से समझ गया।
संपादित
UncleBens मैं मेरी बात को स्पष्ट करना चाहते हैं।
जहां तक मैं एआरवी के सवाल को समझता हूं, यह निर्धारित करना आवश्यक है कि सेट :: सेट और std :: मानचित्र के लिए कितनी मेमोरी आवंटित की गई है जिसमें सेट और मानचित्र के तत्वों के लिए आवंटित सभी मेमोरी शामिल हैं। तो यह सिर्फ आकार (शर्तें) नहीं है।
तो मैंने अभी एक बहुत ही सरल आवंटक का सुझाव दिया है। बहुत ज्यादा विवरण में जाने के बिना यह इस प्रकार दिखाई देंगे:
template <class T>
class your_allocator_1_that_can_counts_memory_consumption_t {
public:
// interfaces that are required by the standart
private:
std::allocator<T> std_allocator_;
// here you need to put your variable to count bytes
size_t globale_variable_for_allocator_1_to_count_bytes_;
};
यह संभाजक सिर्फ आवंटित और deallocated बाइट्स की संख्या की गणना और वास्तविक आवंटन और आवंटन रद्द करने के लिए अपने सदस्य std_allocator_ का उपयोग करें। मुझे यह सुनिश्चित करने के लिए malloc() और मुफ्त() पर ब्रेकपॉइंट सेट करने के लिए जीडीबी के तहत इसे डीबग करने की आवश्यकता हो सकती है ताकि प्रत्येक आवंटन और डिलीवरी वास्तव में मेरे आवंटक के माध्यम से हो।
यदि आप मुझे इस विचार के साथ कुछ समस्याओं पर इंगित करते हैं तो मैं आभारी रहूंगा क्योंकि मैंने इसे अपने प्रोग्राम में पहले से ही लागू किया है जो विंडोज, लिनक्स और एचपी-यूएक्स पर चलता है और मैं बस इतना जानता हूं कि कितनी मेमोरी है मेरे प्रत्येक कंटेनर का उपयोग करें।
'sizeof' एक ऑपरेटर है, फ़ंक्शन नहीं। –
@ करल नोरम: ठीक है आप हैं। याद दिलाने के लिए शुक्रिया! –
हम्म। यह दो कारणों से काम नहीं कर रहा है: सदस्य निजी हैं, और आपको गैर-स्थैतिक सदस्य चर का आकार लेने की अनुमति नहीं है। दिलचस्प! –