2012-03-27 13 views
7

मैं एक मेक्स फ़ाइल लिखने वाला हूं, इसलिए मैं MATLAB में अपने सी ++ कोड का उपयोग कर सकता हूं।सी ++/MATLAB मेक्स बाध्यकारी

यह कोड एक सिंगलटन कक्षा (सी ++ में) के आसपास बनाया गया है।

मैंने पढ़ा है कि स्मृति लगातार बने रहने के लिए मुझे malloc/new के MxAlloc isntead का उपयोग करना है, क्या यह सभी स्मृति के लिए यह सच है? यानी, कक्षा मैंने वैक्टर का उपयोग किया है, और वेक्टर मानक तंत्र का उपयोग कर स्वचालित रूप से नई मेमोरी आवंटित करते हैं।

तो क्या एमएक्सएलोक का उपयोग करके आवंटित कक्षा में एक वेक्टर में इसकी याददाश्त रखने में परेशानी होगी?

+0

महान प्रश्न - इस मुद्दे को दस्तावेज़ीकरण में बहुत अच्छी तरह से समझाया नहीं गया है। मैंने लोगों के बारे में सुना है कि पूरी पुस्तकालयों को फिर से लिखना है कि उन्हें मेक्स-संगत बनाने के लिए प्रत्येक मेमोरी कॉल को बदलने की जरूरत है। –

+0

धन्यवाद! पुनर्लेखन वही है जो मैं बचाना चाहता था क्योंकि लाइब्रेरी अभी भी विकसित हो रही है और इसके परिणामस्वरूप मुझे लाइब्रेरी के दो उदाहरण होंगे, एक सी/सी ++ काम के लिए और एक MATLAB प्रोटोटाइप के लिए। –

+0

हालांकि ध्यान रखें, कि आगे की सूक्ष्मताएं हैं जिन्हें मैं पूरी तरह से सुनिश्चित नहीं करता हूं। उदाहरण के लिए, यदि मैक्स फ़ाइल बाधित है (उदा। त्रुटि के माध्यम से), मानक सी विधियों के माध्यम से आवंटित स्मृति * ठीक से हटाया नहीं जा सकता है ... इस बिंदु पर लोगों के बारे में जानकारी की सराहना की जाएगी! –

उत्तर

7

आप केवल उस डेटा के लिए MxAlloc का उपयोग करते हैं जिसे आप Matlab पर वापस जा रहे हैं। आपकी लाइब्रेरी के भीतर जो भी रहता है वह सामान्य रूप से आवंटित किया जा सकता है।

एक मुद्दा जो आप जानना चाहते हैं वह यह है कि आपकी लाइब्रेरी किसी भी समय अनलोड हो सकती है। आम तौर पर जब उपयोगकर्ता आपके मैक्सफंक्शन को कॉल करता है तो लाइब्रेरी लोड होती है और बाद के कॉल के लिए लोड रहती है। हालांकि, किसी भी समय Matlab आपकी लाइब्रेरी को उतार सकता है और इसलिए आपके मैक्स समारोह में सभी संसाधनों को मुक्त कर दिया जाएगा।

+3

यदि आवश्यक हो, तो आप अपनी मैक्स फ़ाइल को अनलोड किए जाने से रोकने के लिए mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html का उपयोग कर सकते हैं। – Edric