अपना अंतिम क्यू - लघु संस्करण: त्रुटि संदेश "प्रतिबद्ध" वर्चुअल एड्रेस स्पेस के बारे में है। यदि आप अपनी दूसरी स्क्रीन स्नैपशॉट में कमिट ग्राफ को देखते हैं तो आप देखेंगे कि यह वास्तव में सीमा के पास है या बहुत है।
रैम की मात्रा जो "मुक्त", "उपलब्ध" या "उपयोग में" है, इससे कोई फर्क नहीं पड़ता। विशेष रूप से "उपलब्ध" रैम की कमी "मेमोरी पर कम" या "मेमोरी से बाहर" संदेश का कारण नहीं है।
प्रतिबद्ध सीमा कुल RAM + पेजफाइल आकार के बराबर है। जब प्रतिबद्ध मेमोरी आवंटित की जाती है, तो उसे तुरंत "कमिट चार्ज" किया जाता है, भले ही वह वास्तव में अभी तक उपयोग नहीं किया गया हो ... जिसका अर्थ है कि कोई भी रैम या पीएफ स्पेस तुरंत उपयोग नहीं किया जाता है। मेमोरी के वास्तव में संदर्भित होने पर भौतिक स्थान (चाहे रैम या पेजफाइल में) का उपयोग किया जाता है। तब से इसके पास कुछ जगह होना चाहिए, जब तक कि कार्यक्रम इसे मुक्त नहीं करता है, या पूरी प्रक्रिया समाप्त हो जाती है।
उदाहरण: मान लीजिए कि आपके पास कोई पेजफाइल नहीं है, इसलिए आपकी प्रतिबद्ध सीमा 16 जीबी (आपकी रैम का आकार) है। अब, मान लीजिए कि 8 प्रक्रियाएं VirtualAlloc (MEM_COMMIT) 1 GB की कोशिश करती हैं। परिणाम: कमिट चार्ज 8 जीबी बढ़ाया जाता है। हालाँकि, RAM पर कोई तात्कालिक प्रभाव नहीं है! यह ऐसा है जैसे आपने स्टेशनरी की दुकान पर कागज का एक पैड खरीदा है, लेकिन आपको वास्तव में कोई कागज नहीं मिला है। हर बार आपको एक नई शीट की आवश्यकता होती है, हालांकि, एक जादुई रूप से प्रकट होता है। जब तक आप पूरे पैड (आवंटित क्षेत्र का आकार) का उपयोग नहीं करते हैं।
अब मान लें कि उन प्रक्रियाओं में से प्रत्येक केवल 1 एमबी से 100 एमबी तक पहुंचती है। इस्तेमाल की गई रैम केवल 800 एमबी होगी।
लेकिन चूंकि उनमें से प्रत्येक अपने सभी 1 जीबी का संदर्भ दे सकता है , ओएस को यह सुनिश्चित करना होगा कि 8 जीबी रैम + पेजफाइल स्पेस ... अच्छी तरह से, बिना पेजफाइल के मामले में सिर्फ रैम ... को केवल उस स्थिति में उपलब्ध रखा जाता है जो होता है । स्टेशनरी की दुकान पर वापस जाने के लिए, उन्हें स्टॉक में पर्याप्त कागज रखने की आवश्यकता होती है, ताकि सभी को उतनी चादरें दी जा सकें जितनी पहले खरीदी गई थीं।
तदनुसार, OS को वर्चुअलआलोक (MEM_COMMIT) की अनुमति देने से रोकना होगा जब वर्तमान राशि सीमा समाप्त हो जाती है।
क्यूं कर? क्योंकि यह प्रक्रिया सफल होने के लिए VirtualAlloc के परिणाम की जांच करने की अपेक्षा की जाती है। एक बार ऐसा करने के बाद और पाया गया कि आवंटन सफल हो गया है, इस प्रक्रिया को यह अपेक्षा करने का पूरा अधिकार है कि पूरे प्रतिबद्ध क्षेत्र में इसके बाद के संदर्भ सफल होंगे।
यदि विंडोज ने उस स्थान को महसूस करने के लिए उपलब्ध चार्ज को अंतरिक्ष की मात्रा से अधिक करने की अनुमति दी, तो वह अपेक्षा हमेशा पूरी नहीं की जा सकती थी।
एक त्वरित समाधान आपके पेजफाइल के डिफ़ॉल्ट (= प्रारंभिक) आकार को बढ़ाना है। उपरोक्त स्पष्टीकरण से आपको यह देखने में सक्षम होना चाहिए कि क्यों यह त्रुटि संदेश से बच जाएगा भले ही उस फ़ाइल में कभी भी कुछ भी नहीं लिखा जाए । फिर से, ओएस यह सुनिश्चित कर रहा है कि सभी आवेश प्रभारियों के लिए स्थान उपलब्ध है , यदि उसे इसकी आवश्यकता है । जब प्रक्रियाएं प्रतिबद्ध स्मृति को आवंटित करती हैं तो वे कहते हैं "हे, ओएस, मुझे इसकी आवश्यकता हो सकती है।" इसका मतलब यह नहीं है कि वे वास्तव में इसका इस्तेमाल करेंगे, और यह निश्चित रूप से इसका मतलब यह नहीं है कि उन्होंने वास्तव में अभी तक इसका इस्तेमाल किया है।
अधिक जानकारी के लिए, मेरा उत्तर यहां देखें ।
अब .... जब आप अपनी प्रक्रियाओं को इसमें जोड़ते नहीं दिखते हैं तो आप क्यों इतना प्रतिबद्ध हैं, यह एक और सवाल है। यह देखना शुरू करने के लिए, कृपया टास्क मैनेजर के प्रदर्शन टैब, मेमोरी अनुभाग को दिखाएं।