2010-06-12 15 views
5

पर स्मृति आवंटन को कैसे बढ़ाया जाए जब मैं एक सी प्रोग्राम में आकार 300 * 300 * 4 के 3 डी सरणी को प्रारंभ करने का प्रयास करता हूं, तो मेरा प्रोग्राम चलना बंद कर देता है और रिपोर्ट ओवरफ्लो त्रुटि स्टैक करता है। जिस प्रणाली का मैं उपयोग कर रहा हूं वह 3 जीबी रैम है, जो पर्याप्त होना चाहिए। क्या किसी कार्यक्रम में आवंटित स्मृति को बढ़ाने का कोई तरीका है? मैं विंडोज विस्टा पर देव सी ++ का उपयोग कर रहा हूं।प्रोग्राम

उत्तर

11

या तो का उपयोग malloc()/free() (या सी ++ के लिए new[]/delete[]), या एक वैश्विक सरणी, या एक स्थानीय स्थिर सरणी। यदि आप किसी फ़ंक्शन के भीतर एक गैर स्थैतिक सरणी बनाने का प्रयास करते हैं, तो इसे स्टैक और स्टैक पर आवंटित किया जाता है, आमतौर पर बहुत बड़ा नहीं होता है।

आप सरणी को पीछे की ओर शुरू करने का भी प्रयास कर सकते हैं; कुछ ओएस गतिशील रूप से ढेर बढ़ते हैं क्योंकि पेज त्रुटियां होती हैं, और चूंकि x86 पर स्टैक संख्यात्मक रूप से नीचे बढ़ता है, पीछे की ओर बढ़ने से मदद मिल सकती है।

+1

या एक 'std :: वेक्टर (300 * 300 * 4)', या 'बूस्ट :: सरणी , 300>, 4> 'कुछ सी ++ का सुझाव देने के लिए समाधान की। – MSalters

3

आपको यह बढ़ाने की जरूरत है कि आपका प्रोग्राम कितना स्टैक स्पेस उपयोग कर सकता है।

आप गुणों के तहत संवाद में अधिकतम ढेर आकार सेट कर सकते "| प्रणाली | लिंकर ढेर रिजर्व आकार"

2

यहां तक ​​कि अगर आप राम के 3 जीबी है, ढेर आकार ओएस द्वारा सीमित है और आम तौर पर होता है छोटे, इस तरह की बड़ी संरचनाओं को ढेर पर आवंटित किया जाता है, न कि ढेर पर।

चूंकि आप सी ++, maybe you could use Boost का उपयोग कर रहे हैं?

boost::multi_array<int, 3> x (boost::extents[300][300][4]); 
2

आप DevC++ का उपयोग कर रहे हैं, शायद आप जीसीसी संकलक का उपयोग कर रहे हैं और यह के माध्यम से ld लिंकर। लिंकर के पास एक विकल्प -stack stacksize है जो आपको ढेर में आवंटित स्मृति की मात्रा को नियंत्रित करने की अनुमति देता है। आप DevC++ से ऐसा करने के बारे में कैसे जाएंगे, मुझे नहीं पता।

मुझे यह भी नहीं पता कि कोई भी देवक ++ का उपयोग क्यों करेगा - यह छोटी है और अब विकसित नहीं किया जा रहा है। आपको बेहतर आईडीई में बदलने पर विचार करना चाहिए - Code::Blocks में अभी एक नई बड़ी रिलीज है, हर सम्मान में देवसी ++ से बेहतर है, और यह एक और अधिक आधुनिक सी ++ कंपाइलर के साथ आता है।

+1

पूरी तरह से @ आपके दूसरे पैराग्राफ। (हालांकि, इसी कारण से, मुझे नहीं पता कि कोई भी अभी भी विंडोज विस्टा का उपयोग क्यों करेगा;) – Artelius

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