मेरे पास एक सी ++ प्रोग्राम/लिनक्स है, जो 32 जीबी रैम पर त्रुटि std::bad alloc
त्रुटि (और रैपर कॉलर द्वारा पुनरारंभ हो जाता है) में स्पिटिंग शुरू होता है। मुझे इस समस्या को हल करने के लिए वास्तव में क्या ख्याल है, लेकिन मैं कदम से कदम उठाना चाहता हूं और समस्या की मेरी समझ में अपना विश्वास बढ़ा सकता हूं।std :: bad_alloc त्रुटि हो रही है; यह सत्यापित करने के लिए कि ओएस वास्तव में मेमोरी से बाहर हो रहा है
ऐसा लगता है कि सिस्टम new
अनुरोध के लिए स्मृति आवंटित करने में सक्षम नहीं है (यह तब होता है जब ओएस स्मृति से बाहर हो जाता है)। जबकि प्रोग्राम चल रहा है, एक और टर्मिनल पर मैं सबसे छोटे अंतराल (1 सेकंड) के साथ sar
कमांड चलाता हूं, लेकिन मुझे लगता है कि kbcached
~ 24GB मेमोरी है। ओएस कैशिंग को रिहा करने में सक्षम क्यों नहीं है और उस मेमोरी को new
अनुरोध पर उपलब्ध कराया गया है? या तो 1 सेकंड बहुत अधिक समय है (तुलनात्मक कार्यक्रमों की तुलना में) या मैं यहां कुछ गलत कर रहा हूं।
असल में मैं क्रॉस-सत्यापित करना और पिन-पॉइंट करना चाहता हूं कि ओएस वास्तव में स्मृति से बाहर हो रहा है और इस प्रकार स्मृति आवंटित करने में सक्षम नहीं है, और फिर इस बिंदु से चीजें लेते हैं। यह कैसे करना है?
आदर्श रूप में, मैं सही बिंदु पर सिस्टम आँकड़े चाहते हैं जब स्मृति आवंटन, विफल रहता है कितना कैशिंग, कुल का इस्तेमाल किया स्मृति की तरह आदि
बस एक नोट .. इसके पास आपके पास रैम के साथ कुछ भी नहीं है, यह इस बात पर निर्भर करता है कि वर्चुअल मेमोरी एड्रेस स्पेस में कितनी मुफ्त मेमोरी मौजूद है। हालांकि वर्चुअल मेमोरी आवंटन प्रक्रिया को जांचने के लिए मुझे कमांड नहीं पता है। – Naveen
मुझे लगता है कि यह ओएस-विशिष्ट होगा। – sharptooth
आपकी प्रक्रिया कितनी मेमोरी आवंटित की गई? आपकी प्रक्रिया में क्या बाधाएं हैं? क्या यह 32 बिट है? –