2012-03-27 93 views
7

我正要写一个Mex文件,所以我可以在MATLAB中使用我的C++代码。C++/MATLAB Mex binding

此代码是围绕单例类(在C++中)构建的。

我读过的内存要持久化我必须使用MxAlloc而不是malloc/new,这对我所用的所有内存都是如此吗?即,我使用的是矢量类,并且矢量使用标准机制自动分配新的内存。

那么使用MxAlloc分配的类中的向量难以保持内存?

+0

伟大的问题 - 这个问题在文档中没有很好的解释。我听说有人不必要地重新编写整个库,认为他们需要改变每个内存调用以使其兼容MEX。 – 2012-03-27 08:45:51

+0

谢谢!重写正是我想要避免的,因为库仍在开发中,它会导致我有两个库实例,一个用于c/C++工作,另一个用于MATLAB原型。 – 2012-03-27 09:04:27

+0

但请记住,还有一些细节我不完全确定。例如,如果Mex文件被中断(例如,通过错误),则通过标准C方法分配的内存*可能不会被正确地解除分配...对于这一点,来自知情者的进一步输入将被赞赏! – 2012-03-27 09:21:31

回答

7

对于要返回到Matlab的数据,只能使用MxAlloc。您的库中的所有内容都可以正常分配。

您可能想要知道的一个问题是您的库可以随时卸载。通常,当用户调用你的mexFunction时,库被加载并且将保持加载以用于随后的调用。然而,在任何时候Matlab都可以卸载你的库,所以mexFunction中的所有资源都将被释放。

+3

如有必要,您可以使用mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html来停止卸载您的mex文件。 – Edric 2012-03-27 08:37:57