मैं अपने विंडोज आधारित सॉफ़्टवेयर में 4 लाख त्रिकोण प्रस्तुत करना चाहता हूं जो विजुअल स्टूडियो सी ++ 2010 (रिलीज मोड में निर्मित) में लिखा गया है। जब मैं 3.9 मिलियन त्रिकोण प्रस्तुत करता हूं, तो सॉफ्टवेयर द्वारा खपत कुल रैम मेमोरी 400 एमबी है। लेकिन जब मैं 4 लाख त्रिकोण (केवल 100K अधिक) प्रस्तुत करने का प्रयास करता हूं, तो सिस्टम मुझे एक त्रुटि देता है।मैं अपने आवेदन के लिए विजुअल स्टूडियो में सभी उपलब्ध स्मृति कैसे आवंटित कर सकता हूं?
For Example:
Point *P = new (std::nothrow) Point[nb_triangles]; //==> "(std::nothrow)" is for catching the run time memory allocation error. (Point is X, Y, Z floats)
If(P == NULL)
message("System can't allocate this much memory."); // System gives me this error. It means the system can't reserve huge memory for this operation.
मैं आदि कोने, चेहरा Normals, शिखर normals के लिए स्मृति,
असल में आवंटित करने के लिए है कि मैं क्या नहीं मिल रहा है कर रहा है, मेरे पास 8 जीबी रैम मेमोरी, (लेकिन 32 बिट XP खिड़कियों में = 3.2 जीबी मेमोरी), और सॉफ्टवेयर सिर्फ 400 एमबी आरक्षित है, मुफ्त मेमोरी 1 जीबी से अधिक है, लेकिन जब मैं केवल 100 के त्रिकोणों को प्रस्तुत करने की कोशिश करता हूं, तो यह मुझे एक त्रुटि देता है। यह मुझे एक त्रुटि क्यों दे रहा है? क्योंकि इसमें अभी भी 1 जीबी से अधिक रैम मेमोरी है?
क्या इस समस्या को ठीक करने के लिए वैसे भी है, मैं अपने आवेदन के लिए सभी उपलब्ध स्मृति आवंटित कैसे कर सकता हूं? इस समस्या के कारण, मुझे केवल 3.9 लाख त्रिकोणों को प्रस्तुत करने के लिए सॉफ़्टवेयर में सीमा बनाना है और यह अच्छा नहीं है।
और मेरे दिमाग में एक और सवाल है, स्मृति आवंटन के लिए सी ++ "नया" ऑपरेटर मुझे त्रुटि दे रहा है, सी "malloc" ऑपरेटर के बारे में कैसे? इस मुद्दे को ठीक करने के लिए "malloc" कर सकते हैं, क्या इन दोनों के बीच कोई अंतर है?
कृपया मुझे मार्गदर्शन करें। धन्यवाद।
# 1 अद्यतन:
मैंने बहुत कोशिश की है, आदि, कोड को संशोधित मेमोरी लीक निकालने के लिए, है, लेकिन मैं 4 लाखों लोगों की तुलना में अधिक स्मृति आवंटित नहीं कर सकता। मेरा पूरा कोड "वेक्टर" में बदलना संभव नहीं है। मैं "वेक्टर" में नहीं बदल सकता, मुझे अब "नई" के साथ अपनी खुद की डेटा संरचना पर अटक जाना है। निम्नलिखित पॉइंटर्स हैं जिन्हें मैं 1 ऑब्जेक्ट प्रस्तुत करने के लिए आवंटित करना चाहता हूं।
P = new points[10000000]; // points is the class with 3 floats X, Y, Z;
N = new Norm[10000000]; // Norm is the class with 3 floats X, Y, Z;
V = new vNorm[10000000]; // vNorm is the class with 3 floats X, Y, Z;
T = new Tri[10000000]; // Tri is the class with 3 integers v1, v2, v3;
क्या आप रिलीज बिल्ड चला रहे हैं? क्या आपने सीधे एक्सप्लोरर (* यानी * विजुअल स्टूडियो के बाहर) से प्रोग्राम चलाने की कोशिश की है? – paddy
हां बेशक, मैं रिलीज मोड के बारे में बात कर रहा हूं, निर्माण, इंस्टाल और अन्य पीसी में भी कोशिश की। – furqan
क्या आप वाकई मेमोरी लीक या एड्रेस स्पेस विखंडन का अनुभव नहीं कर रहे हैं? –