मैंने कुछ ऐसे अनुप्रयोगों के लिए मेमोरी मैप किए गए आईओ की जांच करने में कुछ समय बिताया है जिस पर मैं काम कर रहा हूं। मेरे पास कुछ बहुत बड़ी (टीबी स्केल) फ़ाइलें हैं, और मैं ओएस-स्तरीय कैशिंग का अधिकतम उपयोग करने, पढ़ने और लिखने दोनों के लिए, उनमें से सेगमेंट को मेमोरी में मैप करना चाहता हूं। जो सॉफ्टवेयर मैं लिख रहा हूं उसे यूनिक्स/लिनक्स और विंडोज के तहत काम करने की ज़रूरत है ... प्रदर्शन महत्वपूर्ण है।प्लेटफ़ॉर्म स्वतंत्र मेमोरी मैप किया गया [फ़ाइल] IO
मैंने boost::iostreams::mapped_file_source
और boost::iostreams::mapped_file_sink
की खोज की है, जो मुझे लगता है कि अधिकांश सुविधाएं प्रदान करते हैं। सुविधाओं मैं चाहते हैं, लेकिन नहीं मिला है कर रहे हैं:
- डिस्क पर लिखी डेटा की एक तुल्यकालन जबरदस्ती (
msync
(2) यूनिक्स पर, विंडोज परFlushViewOfFile
) - फ़ाइलों का ताला लगा दो प्रक्रियाओं को रोकने के लिए (यूनिक्स) निर्माण समय में एक ही समय में एक ही फाइल लिखने के लिए प्रयास कर रहा है (या फाइल अभी भी लिखा जा रहा है पढ़ा ..)
- फ़ाइल का नियंत्रण विशेषताओं
मैं "boost/iostreams/device/mapped_file.hpp"
का उपयोग कर इन बातों को कर सकते हैं ? क्या अन्य प्लेटफार्म स्वतंत्र पुस्तकालय हैं जो मेरी आवश्यकताओं के अनुरूप बेहतर होंगे? क्या मुझे यह लचीलापन प्राप्त करने के लिए अपनी खुद की क्रॉस-प्लेटफार्म लाइब्रेरी विकसित करनी चाहिए?
Btw, "स्मृति मैप की आई/ओ" आम तौर पर पढ़ने आई/ओ पतों का उपयोग करके (मैप की स्मृति उर्फ) बंदरगाहों (एक सूचक का उपयोग कर की तरह) के बजाय विशेष प्रोसेसर का उपयोग करने के लिए संदर्भित करता है मैं/हे निर्देश –
उचित बिंदु। मैं स्मृति मैप किए गए फ़ाइल I/O [http://en.wikipedia.org/wiki/Memory-mapped_file] के बारे में बात कर रहा हूं - और इसे प्रतिबिंबित करने के लिए शीर्षक संपादित किया है। – aSteve