शायद हर किसी के विकास के दौरान कम से कम एक बार इस समस्या का सामना किया:विकास के दौरान "मौत की स्वैपिंग" से कैसे बचें?
while(/*some condition here that somehow never will be false*/)
{
...
yourvector.push_back(new SomeType());
...
}
जैसा कि आप देख कार्यक्रम सभी सिस्टम स्मृति के निकास के लिए शुरू होता है, अपने कार्यक्रम रुक जाता है और अपने सिस्टम को पागल की तरह स्वैप करने के लिए शुरू होता है। यदि आप समस्या को पर्याप्त तेज़ी से पहचान नहीं पाते हैं और प्रक्रिया को मारते हैं तो आपको शायद उन सेकंड में एक अनुत्तरदायी प्रणाली मिलती है जहां आपका माउस पॉइंटर भी हिल नहीं रहा है। आप या तो "प्रोग्राम से बाहर" त्रुटि के साथ अपने प्रोग्राम क्रैश का इंतजार कर सकते हैं (जिसमें कई मिनट लग सकते हैं) या अपने कंप्यूटर पर रीसेट दबाएं।
आप नीचे बग को ट्रैक नहीं कर सकते तो आप तुरंत कई परीक्षण की आवश्यकता होगी और पता लगाने के लिए जो बहुत कष्टप्रद है रीसेट करता है ...
मैं एक संभवतः पार मंच तरीका इसे रोकने के लिए की तलाश में हूँ किसी न किसी तरह। सबसे अच्छा एक डीबग मोड कोड होगा जो प्रोग्राम से बाहर निकलता है अगर यह बहुत अधिक स्मृति आवंटित करता है, लेकिन मैं कैसे ट्रैक कर सकता हूं कि कितनी मेमोरी आवंटित की जाती है? वैश्विक नए ओवरराइडिंग और ऑपरेटरों को हटाने में मदद नहीं मिलेगी, क्योंकि हटाए गए नि: शुल्क फ़ंक्शन में मैं कोई विचार नहीं दूंगा कि कितने बाइट मुक्त हैं।
किसी भी विचार की सराहना की।
किस ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं? कितनी रैम? पेजिंग फ़ाइल का आकार क्या है? जानना जरूरी है। –
आप त्रुटि की इस तरह से ग्रस्त हैं, तो बस स्वैप बंद कर देते हैं। मुझे एक महीने से ऊपर की अपटाइम के साथ मेरे सामने भारी उपयोग की जाने वाली विकास मशीन मिली है। इस्तेमाल किए गए अधिकतम स्वैप के लिए उच्च-पानी का निशान 22 एमआईबी है। (Linux 2.6.32 4GiB कोर, swapiness 60) – msw