2012-02-07 30 views
5

मेरे पास एक ऐसा एप्लिकेशन है जिसमें संभावित रूप से सैकड़ों मेमोरी मैप किए जा सकते हैं, यानी mmap(), फ़ाइलों को किसी भी समय खोला गया है।क्या आईओएस में मेमोरी मैप की गई फाइलों की संख्या पर व्यावहारिक सीमा है?

मैं कुछ मदद की तलाश में हूं, अगर कोई है, तो खुली मेमोरी मैप की गई फ़ाइलों की व्यावहारिक सीमा है।

void* map = mmap(0, *capacity, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0); 
+0

पर मतभेद का उल्लेख है आप सिर्फ उन्हें ऐप्लिकेशन क्रैश जब तक बनाने का प्रयास किया है पर सेब डॉक्स पढ़ें? आपके द्वारा प्राप्त त्रुटि संदेश आपको बताएगा कि आप किस सीमा को पहले हिट करते हैं। – Douglas

उत्तर

5

आईओएस गिरी प्रक्रिया प्रति आभासी स्मृति के 700mb के आसपास आवंटित:

मैं की तरह इन mmap फ़ाइलों को बनाने के। तो यह आपकी सीमा होगी।

आपके पास रैम पर मौजूद सीमा वर्चुअल मेमोरी से रैम में कर्नेल पेज डेटा के रूप में भिन्न होगी क्योंकि आप मैप किए गए डेटा को स्पर्श करते हैं। जब रैम स्वयं भर जाता है, आईफोन 4 पर लगभग 40 एमबी, इस पर निर्भर करता है कि अन्य अनुप्रयोगों द्वारा कितनी रैम वायर्ड की जाती है, और आप अधिक मैप किए गए डेटा का अनुरोध करते हैं, तो कर्नेल को डेटा से डेटा को डेटा करने की आवश्यकता होगी और अनुरोध किए गए डेटा के साथ इसे प्रतिस्थापित करना होगा इसे रैम में पेजिंग।

याद रखने की एक और बात यह है कि यदि आप PROT_READ | PROT_WRITE का उपयोग करते हैं तो आप डेटा मैप किए गए फ़ाइल में लिखे जाने की अनुमति दे रहे हैं। यदि आप मैप किए गए फ़ाइल में डेटा लिखने का निर्णय लेते हैं तो यह आवंटित स्पेस के 700 एमबी को प्रभावित करेगा।

तो वर्चुअल मेमोरी के लिए सीमा 700 एमबी है, चाहे आप 500 एमबी की एक फाइल मैप करें और फिर इसमें 200 एमबी डेटा लिखें, या यदि आपके पास उदा। 10 एक्स 70 एमबी मैप की गई फाइलें जिन्हें आपने अभी पढ़ा है।

एक आखिरी बात यह है कि आप खोले गए फ़ाइल को छोड़ सकते हैं जो मैप किए गए डेटा का स्रोत था जैसे ही आपको mmap() का उपयोग करके सफलतापूर्वक मैप की गई फ़ाइल मिली है।

उम्मीद है कि इससे मदद मिलती है।

अतिरिक्त जानकारी:

  • iphone के 700mb आभासी स्मृति और 40mb रैम के आसपास के बारे में, इस वाद्ययंत्र का उपयोग रूपरेखा कर से आता है।

  • सिस्टम मेमोरी प्रबंधन की वास्तविक कार्यप्रणाली के संबंध में। virtual memory पर यह पढ़ें कि यह आईओएस पर कैसे काम करता है। virtual memory जो ओएस एक्स पर केंद्रित है, लेकिन आईओएस

+0

उत्तर के लिए धन्यवाद! क्या यह जानकारी ऐप्पल की साइट पर कहीं परिभाषित है, इसलिए मैं इसके बारे में अधिक विस्तार से पढ़ सकता हूं? –

+0

@TReddy - मैंने अपना जवाब अपडेट किया। यदि आप रुचि रखते हैं कि कर्नेल वास्तव में निम्न स्तर पर स्मृति को कैसे संभालता है, तो एक टिप्पणी जोड़ें और मैं और स्रोत जोड़ सकता हूं। : डी – jarryd

+0

लिंक के लिए धन्यवाद ... बहुत जानकारीपूर्ण ... –

संबंधित मुद्दे