मैं एक बड़ी, विरोधाभासी पता स्थान आवंटित करने के लिए (इन * निक्स) चाहता हूं, लेकिन संसाधनों का उपभोग किए बिना, यानी मैं बाद में आवंटित एक पता सीमा आरक्षित करना चाहता हूं।मैं उन्हें आवंटित किए बिना मेमोरी पतों को कैसे आरक्षित कर सकता हूं
मान लीजिए कि मैं 3 जी आवंटित करने के लिए foo = malloc (3 * 1024 * 1024 * 1024) करता हूं, लेकिन 1 जी कंप्यूटर पर स्वैप फ़ाइल के 1 जी के साथ। यह असफल हो जाएगा, है ना?
मुझे क्या करना चाहते हैं कहते हैं कि "मुझे दो एक स्मृति पता श्रेणी foo ... foo + 3 जी जिसमें मैं आवंटन किया जाएगा" इसलिए मैं इस क्षेत्र के भीतर सभी आवंटन सन्निहित हैं गारंटी ले सकते हैं है, लेकिन वास्तव में आवंटन के बिना तुरंत।
उपर्युक्त उदाहरण में, मैं एक बार = malloc (123) कॉल के साथ foo = reserve_memory (3 जी) कॉल का पालन करना चाहता हूं, जिसे आरक्षित किया जाना चाहिए क्योंकि reg_memory ने अभी तक कोई संसाधन नहीं खाया है, यह गारंटी देता है कि बार नहीं होगा श्रेणी foo में हो ... foo + 3 जी।
बाद में मैं foo की सीमा के बाइट 0..234 का उपभोग करने के लिए allocate_for_real (foo, 0,234) की तरह कुछ करता। इस बिंदु पर, कर्नेल कुछ वर्चुअल पेज आवंटित करेगा और उन्हें foo पर मैप करेगा ... foo + 123 + N
क्या यह उपयोगकर्ता स्पेस में संभव है?
(इस का मुद्दा यह है कि में foo ... जरूरत वस्तुओं आस पास होने की और उसके बाद वे बनाई गई हैं यथोचित ले जाया जा सकता है।)
धन्यवाद।
मुझे आशा है कि आप 64-बिट प्लेटफ़ॉर्म पर हैं, या 3 जी ब्लॉक आवंटन सफल होने की संभावना नहीं होगी। – MarkR
वर्चुअल या शारीरिक रूप से संगत? – shodanex