2009-04-07 16 views
23

मेमोरी-मैप की गई फ़ाइल के आकार को सीमित करता है? मुझे पता है कि यह आवंटित पता स्थान के सबसे बड़े निरंतर खंड से बड़ा नहीं हो सकता है, और यह कि पर्याप्त खाली डिस्क स्थान होना चाहिए। लेकिन क्या अन्य सीमाएं हैं?मेमोरी-मैप की गई फ़ाइल कितनी बड़ी हो सकती है?

+0

प्लेटफार्म? विंडोज या लिनक्स? –

उत्तर

24

आप बहुत रूढ़िवादी हैं: एक स्मृति-मैप की गई फ़ाइल पता स्थान से बड़ी हो सकती है। मेमोरी-मैप की गई फ़ाइल के ओएस मेमोरी बाधाओं से सीमित है, लेकिन यह केवल उस फ़ाइल का हिस्सा है जिसे आप एक ही समय में देख रहे हैं। (और मुझे लगता है कि तकनीकी रूप से आप फ़ाइल के असंतुलित हिस्सों के एक बार में कई दृश्यों को मानचित्र बना सकते हैं, इसलिए ओवरहेड और पेज लम्बाई बाधाओं से अलग, यह केवल बाइट्स का कुल # है जो आप देख रहे हैं कि यह एक सीमा है। आप बाइट्स को देख सकते हैं [1024 0] और बाइट्स [2 + 1024 के लिए] दो अलग-अलग विचारों के साथ।)

एमएस विंडोज में, MapViewOfFile समारोह को देखो। यह प्रभावी रूप से 64-बिट फ़ाइल ऑफसेट और 32-बिट लंबाई लेता है।

+0

हां, मुझे "दृश्य" कहना चाहिए था। मुझे एक बार में पूरी फ़ाइल तक पहुंचने की आवश्यकता है, बिना एमएमएपी() आईएनजी के। – user88185

+0

MapViewOfFile 64-बिट मशीन – springy76

+0

पर 64-बिट लंबाई लेता है वैसे भी कोई भी आकार के लिए शून्य को पास कर सकता है जिसका अर्थ है "फ़ाइल जितना बड़ा है" –

1

कोई अन्य सीमा नहीं होनी चाहिए। क्या वे पर्याप्त नहीं हैं? ;-)

+0

64 बिट ओएस पर ये सीमाएं काफी ढीली लगती हैं ... – user88185

1

विंडोज के तहत: "फ़ाइल दृश्य के आकार का अनारक्षित आभासी स्मृति में से सबसे बड़ी उपलब्ध सन्निहित ब्लॉक तक ही सीमित है यह अधिक से अधिक 2 जीबी शून्य से आभासी स्मृति पहले से ही प्रक्रिया द्वारा आरक्षित है।।"

MDSN से।

मुझे LINUX/OSX/जो कुछ भी अन्य के बारे में निश्चित नहीं है, लेकिन यह शायद पता स्थान से भी संबंधित है।

+1

बस स्पष्ट करने के लिए, यह फ़ाइल दृश्य का आकार है, न कि फ़ाइल का आकार। –

+5

"2 जीबी शून्य वर्चुअल मेमोरी पहले से ही प्रक्रिया द्वारा आरक्षित है" 32 बिट मशीन पर है? क्या यह 64 बिट बॉक्स पर अलग है? – user88185

0

लिनक्स पर FUSE के साथ आप एक मेमोरी फाइल सिस्टम भी बना सकते हैं जो मांग पर डिस्क तक फैलता है। मुझे यकीन नहीं है कि स्मृति मैप किए गए के रूप में अर्हता प्राप्त करता है, और भेद को धुंधला हो जाता है।

-3
विषय पर

विकिपीडिया प्रविष्टि: http://en.wikipedia.org/wiki/Memory-mapped_file

+0

मुझे इस विकिपीडिया आलेख में उल्लिखित अन्य सीमाएं नहीं मिलीं, इसका मतलब है कि कोई नहीं है? – user88185

+1

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http: //meta.stackoverflow।कॉम/क्यू/825 9) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

9

यह मेरा अनुभव है जब Win32 के तहत स्मृति-मैप की गई फ़ाइलों का उपयोग कर:

अपने नक्शे एक खंड में पूरी फ़ाइल है, यह सामान्य रूप से बाहर चारों ओर पर टैप करता 750 एमबी, क्योंकि यह स्मृति की एक बड़ी संगत ब्लॉक नहीं मिल सकता है। यदि आप इसे छोटे सेगमेंट में विभाजित करते हैं, तो प्रत्येक 100MB कहें, आप और क्या चल रहा है इसके आधार पर लगभग 1500MB-1800MB प्राप्त कर सकते हैं।

यदि आप /3g switch का उपयोग करते हैं तो आप लगभग 2700 एमबी तक 2 जीबी से अधिक प्राप्त कर सकते हैं लेकिन ओएस प्रदर्शन को दंडित किया जाता है।

मुझे 64-बिट के बारे में निश्चित नहीं है, मैंने कभी कोशिश नहीं की है, लेकिन मुझे लगता है कि अधिकतम फ़ाइल आकार केवल आपके पास भौतिक स्मृति की मात्रा से ही सीमित है।

+0

64-बिट पर सीमा उपलब्ध पता स्थान है, जो 32-बिट पर समान है। आप 32-बिट मशीन पर 1 जीबी व्यू मैप कर सकते हैं जिसमें केवल 32 एमबी भौतिक मेमोरी है। उसी तरह आप 32-बिट मशीन पर 10TB व्यू को मैप कर सकते हैं जिसमें केवल 0.5GB मेमोरी है। केवल 4kb पृष्ठ जिन्हें आप वास्तव में एक्सेस करते हैं उन्हें वास्तविक स्मृति में मैप किया जाता है। – springy76

+1

@ springy76: आप 32-बिट मशीन पर 10TB दृश्य को मैप नहीं कर सकते हैं। केवल 64-बिट पर। –

+4

@ सर्गेईके। आप बहुत सही हैं, यही वह भी है जो मैं लिखना चाहता था - लेकिन मेरी उंगलियों ने कुछ और टाइप किया। इसे पढ़ना चाहिए "उसी तरह आप एक 64-बिट मशीन पर 10TB दृश्य को मैप कर सकते हैं जिसमें केवल 0.5 जीबी मेमोरी है" – springy76

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