मैंने एक कनवर्टर लिखा है जो openstreetmap xml फ़ाइलों को लेता है और उन्हें एक बाइनरी रनटाइम रेंडरिंग प्रारूप में परिवर्तित करता है जो आमतौर पर मूल आकार का लगभग 10% होता है। इनपुट फ़ाइल आकार आमतौर पर 3 जीबी और बड़े होते हैं। इनपुट फ़ाइलों को एक साथ स्मृति में लोड नहीं किया जाता है, लेकिन अंक और polys के रूप में स्ट्रीम किया जाता है, तो एक बीएसपी उन पर चलाया जाता है और फ़ाइल आउटपुट है। हाल ही में बड़ी फाइलों पर यह स्मृति से बाहर हो जाता है और मर जाता है (प्रश्न में से एक में 14 मिलियन अंक और 1 मिलियन बहुभुज हैं)। आम तौर पर जब यह होता है तो मेरा प्रोग्राम लगभग 1 जीबी से 1.2 जीबी रैम का उपयोग कर रहा है। मैंने वर्चुअल मेमोरी को 2 से 8 जीबी (एक्सपी पर) बढ़ाने की कोशिश की है, लेकिन इस बदलाव से कोई प्रभाव नहीं पड़ा। साथ ही, चूंकि यह कोड ओपन-सोर्स है, इसलिए मैं उपलब्ध राम (हालांकि धीमे) के बावजूद इसे काम करना चाहता हूं, यह विंडोज, लिनक्स और मैक पर चलता है।उच्च स्मृति उपयोग अनुप्रयोग में स्मृति से बाहर निकलने से कैसे बचें? सी/सी ++
स्मृति से बाहर होने से बचने के लिए मैं किस तकनीक का उपयोग कर सकता हूं? छोटे उप-सेट में डेटा को प्रोसेस करना और फिर अंतिम परिणाम विलय करना? हैंडलर की अपनी वर्चुअल मेमोरी प्रकार का उपयोग करना? कोई अन्य विचार?
विंडोज़ के पास 3 जीबी वर्चुअल स्पेस हो सकता है/LARGEADDRESSAWARE –
फ्लैग प्रक्रिया को 4 जीबी * तक उपयोग करने की अनुमति देता है यदि ओएस इसे * प्रदान कर सकता है। आम तौर पर, विंडोज़ अभी भी प्रत्येक प्रक्रिया में केवल 2 जीबी देने के लिए स्थापित है। यह आपको 3 जीबी देने के लिए ड्राइवर अस्थिरता के जोखिम पर भी बदला जा सकता है। पीएई के साथ, आप और भी प्राप्त कर सकते हैं। लेकिन 64-बिट शायद एक बेहतर शर्त है। – jalf
इमो, तीसरा विकल्प सबसे महत्वपूर्ण है। स्मृति पर नियंत्रण देने के अलावा, यह समानांतर प्रसंस्करण के लिए भी अनुमति देता है। – xtofl