दो अलग-अलग मेमोरी सीमाएं हैं। वर्चुअल मेमोरी लिमिट और फिजिकल मेमोरी लिमिट।
अप्रत्यक्ष स्मृति
वर्चुअल मेमोरी उपलब्ध पते के आकार और लेआउट द्वारा सीमित है। आमतौर पर बहुत शुरुआत में निष्पादन योग्य कोड और स्थैतिक डेटा और अतीत होता है जो ढेर बढ़ता है, जबकि अंत में कर्नेल द्वारा आरक्षित क्षेत्र है, इससे पहले कि यह साझा पुस्तकालयों और स्टैक (जो अधिकांश प्लेटफार्मों पर बढ़ता है)। यह ढेर और ढेर मुक्त स्थान को विकसित करने के लिए देता है, अन्य क्षेत्रों को प्रक्रिया स्टार्टअप और निश्चित पर जाना जाता है।
मुक्त वर्चुअल मेमोरी को शुरू में प्रयोग करने योग्य के रूप में चिह्नित नहीं किया जाता है, लेकिन आवंटन के दौरान इसे चिह्नित किया जाता है। जबकि ढेर सभी उपलब्ध मेमोरी तक बढ़ सकता है, अधिकांश सिस्टम ऑटो-ग्रो स्टैक नहीं करते हैं। स्टैक के लिए IIRC डिफ़ॉल्ट सीमा लिनक्स पर 8MiB और विंडोज पर 1MiB है और दोनों प्रणालियों पर इसे बदला जा सकता है। वर्चुअल मेमोरी में किसी भी मेमोरी-मैप्ड फाइल और हार्डवेयर होते हैं।
एक कारण है कि स्टैक को स्वतः विकसित नहीं किया जा सकता (मनमाने ढंग से) यह है कि बहु-थ्रेडेड प्रोग्राम को प्रत्येक थ्रेड के लिए अलग स्टैक की आवश्यकता होती है, इसलिए वे अंततः एक-दूसरे के रास्ते में आ जाएंगे।
32-बिट प्लेटफार्मों पर वर्चुअल मेमोरी की कुल मात्रा 4 जीआईबी है, लिनक्स और विंडोज दोनों सामान्य रूप से कर्नेल के लिए अंतिम 1 जीआईबी को संग्रहित करते हैं, जिससे आपको पता स्थान के अधिकांश 3 जीआईबी मिलते हैं। लिनक्स का एक विशेष संस्करण है जो आपको पूर्ण 4GiB देने के लिए कुछ भी आरक्षित नहीं करता है। यह बड़े डेटाबेस के दुर्लभ मामले के लिए उपयोगी है जहां अंतिम 1GiB दिन बचाता है, लेकिन नियमित उपयोग के लिए यह अतिरिक्त पेज टेबल रीलोड के कारण थोड़ा धीमा है।
64-बिट प्लेटफार्मों पर वर्चुअल मेमोरी 64EiB है और आपको इसके बारे में सोचने की ज़रूरत नहीं है।
भौतिक स्मृति
भौतिक मेमोरी आमतौर पर केवल ऑपरेटिंग सिस्टम द्वारा आवंटित की जाती है जब प्रक्रिया को इसे एक्सेस करने की आवश्यकता होती है। एक प्रक्रिया कितनी भौतिक मेमोरी का उपयोग कर रही है, बहुत ही अस्पष्ट संख्या है, क्योंकि कुछ मेमोरी को प्रक्रियाओं (कोड, साझा लाइब्रेरी और किसी अन्य मैप की गई फ़ाइलों) के बीच साझा किया जाता है, फाइलों से डेटा को मेमोरी में लोड किया जाता है और मेमोरी की कमी होने पर खारिज कर दिया जाता है और "अनाम" मेमोरी (फ़ाइलों द्वारा समर्थित नहीं) स्वैप की जा सकती है।
लिनक्स पर जब आप भौतिक मेमोरी से बाहर निकलते हैं तो vm.overcommit_memory
सिस्टम सेटिंग पर निर्भर करता है । डिफ़ॉल्ट को ओवरकॉमिट करना है। जब आप सिस्टम को मेमोरी आवंटित करने के लिए कहते हैं, तो यह आपको कुछ देता है, लेकिन केवल वर्चुअल मेमोरी को आवंटित करता है। जब आप वास्तव में मेमोरी को एक्सेस करते हैं, तो यह उपयोग करने के लिए कुछ भौतिक मेमोरी प्राप्त करने की कोशिश करेगा, डेटा को त्यागना जो आवश्यक के रूप में चीजों को फिर से भरना या स्वैप कर सकता है। यदि यह पाता है कि यह कुछ भी मुक्त नहीं कर सकता है, तो यह प्रक्रिया को अस्तित्व से हटा देगा (प्रतिक्रिया का कोई तरीका नहीं है, क्योंकि उस प्रतिक्रिया के लिए अधिक मेमोरी की आवश्यकता हो सकती है और इससे अंतहीन लूप बन जाएगा)।
यह एंड्रॉइड (जो कि लिनक्स भी है) पर प्रक्रियाएं मर जाती हैं। तर्क के साथ तर्क में सुधार किया गया था कि प्रक्रिया क्या है और यह कितनी पुरानी है, इसके आधार पर अस्तित्व से हटाने की प्रक्रिया है। एंड्रॉइड की प्रक्रियाएं बस कुछ भी करना बंद कर देती हैं, लेकिन पृष्ठभूमि में बैठते हैं और "आउट ऑफ मेमोरी किलर" उन्हें मार डालेगा जब उसे नए लोगों के लिए मेमोरी की आवश्यकता होती है।