2009-08-14 7 views
9

जब मैं MATLAB में एक नमूना स्क्रिप्ट चलाने, यह कहते हैं:MATLAB त्रुटि "स्मृति से बाहर"

मेमोरी समाप्त। अपने विकल्पों के लिए सहायता स्मृति टाइप करें।

जब मैं टाइप "स्मृति", यह रिपोर्ट:

Maximum possible array:    156 MB (1.638e+008 bytes) * 
Memory available for all arrays: 740 MB (7.756e+008 bytes) ** 
Memory used by MATLAB:    1054 MB (1.105e+009 bytes) 
Physical Memory (RAM):    3070 MB (3.219e+009 bytes) 

* Limited by contiguous virtual address space available. 
** Limited by virtual address space available. 

वहाँ किसी भी तरह से इस त्रुटि से बचने के लिए है? मैं MATLAB 200a के साथ विंडोज एक्सपी x32 का उपयोग कर रहा हूँ।

+1

आप वास्तव में क्या चलते हैं? – Martijn

+1

नमूना स्क्रिप्ट पोस्ट करना (या जिन हिस्सों में यह त्रुटियां हैं, यदि यह लंबी है) तो लोगों को आपकी विशिष्ट समस्या को बेहतर ढंग से संबोधित करने में मदद मिलेगी। – gnovice

उत्तर

6

समस्या तय की गई।

Windows XP x32 के तहत, मैं संपादन boot.ini स्विच जोड़ने के लिए द्वारा MATLAB के लिए उपलब्ध स्मृति से लगभग दोगुना राशि में कामयाब/3GB/USERVA = 3030

[boot loader] 
timeout=30 
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 
[operating systems] 
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3GB /USERVA=3030 
साथ में हमारे सरणी आकार को कम करने के साथ

, यह पूरी तरह से समस्या को हल करता है :)

मैं विंडोज x64 या विंडोज   7 x64 में अपग्रेड करके समस्या को भी हल कर सकता था। यह कार्य MATLAB को उपलब्ध स्मृति की मात्रा को भी दोगुना करता है, भले ही आप MATLAB x32 के साथ चिपके रहते हैं और MATLAB x64 में अपग्रेड नहीं करते हैं। विंडोज़ x64 अभी तक अधिक मेमोरी कुशल है, यहां तक ​​कि सिस्टम के साथ केवल 4   जीबी भौतिक रैम स्थापित है।

+3

"केवल 4 जीबी भौतिक रैम है" - हे, यह सभी रिश्तेदार –

+0

हां है! जब मैं 16 वर्ष का था, और 640 केबीटी रैम के साथ एक्सटी के गर्व मालिक, तो मैंने कभी यह नहीं माना होगा अगर किसी ने कहा था "ठीक है, लड़का, किसी दिन आप निम्नलिखित टिप्पणी करेंगे ..." – Contango

+1

[टाइमक्स- सिंक्लेयर 1000] (http://en.wikipedia.org/wiki/Timex_Sinclair_1000) सीए। 1 9 82 में 2 के रैम था; हमने $ 40 की तरह कुछ के लिए प्लग-इन 16 के मेमोरी मॉड्यूल खरीदा। मैं अपने काम के लिए डीएसपीआईसी उपकरणों के साथ काम करता हूं, वे कहीं भी 1 के से 48 के रैम तक आते हैं। 8-बिट पीआईसी कम है: कुछ पीआईसी 10 भागों में रैम के 16 बाइट्स (किलोबाइट्स नहीं, * बाइट्स * ... ** BYTES ** HA HA HA) हैं। तो 2015 में भी यह अभी भी सापेक्ष है। :-) –

12

pack मेमोरी डीफ्रैग्मेंटेशन करता है। यह थोड़ी सी मदद कर सकता है जहां तक ​​संगत स्मृति उपलब्ध हो।

+0

टिप्पणी के लिए धन्यवाद। की सराहना की! – Contango

+0

एक आकर्षण की तरह काम किया! – Deven

9

याद रखें, जब MATLAB का कहना है कि यह स्मृति से बाहर है, तो इसका मतलब है कि यह संगत स्मृति से बाहर है, इसलिए MATLAB को रीबूट या पुनरारंभ करना काम कर सकता है।

लेकिन, मैं आपके कोड को अनुकूलित करने और यह पहचानने की सिफारिश करता हूं कि आप कितनी मेमोरी खा रहे हैं। यह एक बीमार डिज़ाइन किया गया रिकर्सिव लूप हो सकता है, या खराब इंडेक्सिंग फ़ंक्शन (एक विशाल मैट्रिक्स को इंडेक्स करने के लिए लॉजिकल के बजाय युगल का उपयोग कर सकता है)।

मैं थोड़ी देर के लिए मेमोरी त्रुटियों के साथ व्यावहारिक रूप से रहता था क्योंकि मैं विशाल डेटासेट से निपट रहा था, लेकिन हमेशा एक कामकाज है, विशिष्ट प्रश्न पूछें और आप surprised होंगे।

2

स्मृति (ओओएम) से बाहर होने पर आवंटित करने का क्या प्रयास कर रहे हैं? क्या आपके पास पुनरुत्पादन करने के लिए कोड है? समस्याओं की एक विस्तृत श्रृंखला स्मृति त्रुटियों से बाहर हो सकती है।

निदान करने के लिए, त्रुटियों पर ब्रेकपॉइंट सेट करने के लिए "सभी त्रुटि" dbstop का उपयोग करें। स्मृति से बाहर यह ट्रिगर होगा, और आप यह देखने के लिए dbup, dbdown, और whos() का उपयोग कर सकते हैं कि स्मृति क्या है। प्रायः एक ओओएम खराब डेटा संरचनाओं या सूचकांक गणना के कारण होता है, न केवल बड़े डेटा संरचनाओं द्वारा। जैसे यह किसी भी 32-बिट MATLAB में ओओएम को ट्रिगर करेगा।

>> x = 1; 
>> x(2^30) = 2 
??? Out of memory. Type HELP MEMORY for your options. 
+0

टिप्पणी के लिए धन्यवाद। की सराहना की! समस्या अब तय की गई है (नीचे देखें)। – Contango

+1

@ ग्रेविटास: "नीचे" क्या है? प्रतिक्रिया पोस्ट करते समय कृपया आदेश पर भरोसा न करें। – Arafangion

1

इसे आज़माएं, यह मेरे लिए अच्छा काम करता है।

  • होम पर जाएँ -> पसंद आइकन -> सामान्य -> ​​जावा ढेर मेमोरी -> आवंटित स्मृति का क्या आकार आप चाहते हैं
  • पसंद विंडो में, "कार्यस्थान" के लिए जाना (जावा ढेर स्मृति स्तर में से) -> "Matlab Array आकार सीमा" देखें सुनिश्चित करें कि 'अधिकतम सरणी आकार को रैम के प्रतिशत तक सीमित करें' को अनचेक करें। क्योंकि आप स्मृति को विस्तारित करना चाहते हैं, इसलिए हमें इस सुविधा की आवश्यकता नहीं है।
  • हो गया।