मैं अपनी प्रक्रिया में आरक्षित वर्चुअल एड्रेस स्पेस को स्मृति के लिए आरक्षित रखना चाहता हूं जिसे पहले इस्तेमाल किया गया था लेकिन वर्तमान में इसकी आवश्यकता नहीं है। मुझे उस परिस्थिति में रूचि है जहां होस्ट कर्नेल लिनक्स है और यह ओवरकॉमिट को रोकने के लिए कॉन्फ़िगर किया गया है (जो यह सभी प्रतिबद्ध स्मृति के लिए विस्तृत लेखांकन द्वारा करता है)।क्या एमएमएपी/mprotect-readonly शून्य पेज प्रतिबद्ध स्मृति की ओर गिनती है?
मैं सिर्फ डेटा है कि अपने आवेदन नहीं रह गया है भौतिक स्मृति कब्जे या (संसाधन किसी भी तरह से बर्बाद कर) डिस्क के लिए बदली होने से उपयोग कर रहा है को रोकने के लिए चाहते हैं, मैं गिरी है कि यह अनावश्यक है, या mmap
नया शून्य पृष्ठों पर madvise
कर सकते हैं इसके ऊपर लेकिन इन दृष्टिकोणों में से कोई भी आवश्यक रूप से स्मृति की मात्रा को कम नहीं करेगा, जो कि अन्य प्रक्रियाओं को तब उपयोग करने से रोका जाता है।
क्या होगा यदि मैं पृष्ठों को ताजा शून्य पृष्ठों के साथ प्रतिस्थापित करता हूं जिन्हें केवल पढ़ने के लिए चिह्नित किया जाता है? मेरा इरादा यह है कि वे प्रतिबद्ध स्मृति की ओर गिनती नहीं करते हैं, और आगे मैं mprotect
का उपयोग उन्हें लिखने के लिए कर सकता हूं, और अगर वे लिखने योग्य हो तो यह असफल हो जाएगा प्रतिबद्ध प्रतिबद्धता सीमा पर जायेगा। क्या मेरी समझ सही है? यह काम करेगा?
एक पठनीय पृष्ठ को किसी प्रक्रिया में प्रतिबद्ध नहीं किया जाना चाहिए 'प्रतिबद्ध शुल्क (मेरे पास कोई संदर्भ नहीं है, इसलिए यह कोई जवाब नहीं है), और लिनक्स MAP_NORESERVE ध्वज प्रदान करता है जो आपको एक मजबूत भी प्रदान करना चाहिए गारंटी। लेकिन मुझे यह पूछना है: आप स्मृति में आरक्षित करने की आवश्यकता क्यों महसूस करते हैं जो उपयोग में नहीं है? – Anon
खराब चीजें (टीएम) तब होती हैं जब समान वर्चुअल पतों को 'एमएमएपी' (यादृच्छिक रूप से) द्वारा आवंटित किया जाता है, बिना कार्यक्रम के जागरूक किए जाते हैं। :-) 'MAP_NORESERVE' के लिए, मुझे चिंता है कि पृष्ठों को बाद में लिखने के बाद भी पृष्ठों को गिनने से रोक सकता है। मुझे लगता है कि मैं फिर से नए शून्य पृष्ठों के साथ 'mmap'- पर फिर से कर सकता था। –
क्या बुरी चीजें होती हैं? आपके प्रोग्राम को पहले कभी इस्तेमाल किए गए पता स्थान का पुन: उपयोग करने की आवश्यकता क्यों नहीं है? यह बहुत असामान्य लगता है। – Angus