2012-06-18 25 views
6

मैं प्रवाह नेटवर्क पर एक पुनरावृत्ति गणना कर रहा हूं जिसके दौरान मुझे यह रिकॉर्ड करने की आवश्यकता है कि प्रत्येक स्रोत प्रत्येक किनारे पर प्रवाह में कितना योगदान देता है। किसी एक किनारे पर प्रवाह औसतन 2% स्रोतों के कारण होता है, इसलिए मैं vector< map<int, double> > flow परिभाषित करता हूं, जहां flow[e][s] = f का अर्थ है कि स्रोत s स्रोत के कारण किनारे e पर प्रवाह है। प्रत्येक पुनरावृत्ति पर, flow में प्रत्येक f अपडेट हो जाता है।मानचित्र के वेक्टर को प्रतिस्थापित करने के लिए बाहरी मेमोरी डेटा संरचना

कार्यक्रम का शीर्ष मेमोरी उपयोग 4 जीबी के करीब आता है। यह (32-बिट) लिनक्स और ओएस एक्स पर काम करता है, लेकिन यह विंडोज़ पर दुर्घटनाग्रस्त हो जाता है (जो 2 GB per process limit लगाता है)।

मैं vector< map<int, double> > इंटरफ़ेस (या अन्यथा इस समस्या के आसपास हो) के साथ डिस्क-आधारित डेटा संरचना को कैसे कार्यान्वित कर सकता हूं?

उत्तर

2

मैंने इसी प्रकार के परिदृश्यों के लिए STXXL का उपयोग किया है। यह देखने लायक हो सकता है।

0

यदि नक्शा का वेक्टर सभी मेमोरी का उपभोग कर रहा है, तो क्या डेटा फ़ील्ड के लिए double होना आवश्यक है? बदलना मदद कर सकता है।

अन्यथा, आप memory map का उपयोग करने में सक्षम हो सकते हैं, हालांकि इसे क्रॉस-प्लेटफ़ॉर्म संगत बनाना थोड़ा सा काम होगा, खासकर आपके मैपिंग के लिए एम्बेडेड डेटा संरचना के साथ।