2012-03-27 6 views
7

Ich bin dabei, eine Mex-Datei zu schreiben, damit ich meinen C++ - Code in MATLAB verwenden kann.C++/MATLAB Mex-Bindung

Dieser Code ist um eine Singleton-Klasse (in C++) aufgebaut.

Ich habe gelesen, dass für den dauerhaften Speicher ich MxAlloc anstelle von malloc/new verwenden muss, gilt das für alle Speicher, die ich verwende? Das heißt, die Klasse, die ich verwende, verwendet Vektoren, und Vektoren ordnen automatisch neuen Speicher unter Verwendung von Standardmechanismen zu.

Wird ein Vektor in einer Klasse, die mit MxAlloc zugewiesen wurde, Probleme haben, seinen Speicher zu behalten?

+0

Große Frage - dieses Problem wird in der Dokumentation nicht sehr gut erklärt. Ich habe von Leuten gehört, die unnötigerweise ganze Bibliotheken neu schreiben, die denken, dass sie jeden Speicheranruf ändern müssen, um es MEX-kompatibel zu machen. –

+0

Danke! Das Umschreiben ist genau das, was ich vermeiden wollte, da die Bibliothek noch in der Entwicklung ist und es würde dazu führen, dass ich 2 Instanzen der Bibliothek habe, eine für c/C++ und eine für MATLAB Prototyping. –

+0

Bedenken Sie jedoch, dass es weitere Feinheiten gibt, von denen ich mir nicht ganz sicher bin. Wenn beispielsweise die Mex-Datei unterbrochen wird (z. B. durch einen Fehler), kann Speicher, der über Standard-C-Methoden * zugewiesen wurde, nicht ordnungsgemäß freigegeben werden. Weitere Eingaben von Personen, die dies wissen, würden an dieser Stelle erwünscht sein! –

Antwort

7

Sie verwenden MxAlloc nur für die Daten, die Sie an Matlab senden. Alles, was in Ihrer Bibliothek verbleibt, kann normal zugewiesen werden.

Ein Problem, das Sie beachten sollten, ist, dass Ihre Bibliothek jederzeit entladen werden kann. Normalerweise, wenn der Benutzer Ihre mexFunction aufruft, wird die Bibliothek geladen und bleibt für nachfolgende Aufrufe geladen. Jedoch kann Matlab jederzeit Ihre Bibliothek entladen und so werden alle Ressourcen in Ihrer mexFunction freigegeben.

+3

Bei Bedarf können Sie mit mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html verhindern, dass Ihre mex-Datei entladen wird. – Edric