C++/MATLAB Mex绑定

7
我即将编写一个Mex文件,以便在MATLAB中使用我的c++代码。
这段代码是围绕一个单例类(在c++中)构建的。
我读到说为了使内存持久化,我必须使用MxAlloc而不是malloc/new,对于我使用的所有内存都是如此吗?也就是说,我所使用的类使用向量,而向量自动分配新内存,使用标准机制。
那么,在使用MxAlloc分配的类中的向量会有保持其内存的问题吗?

很好的问题 - 这个问题在文档中没有很好的解释。我听说过有人不必要地重新编写整个库,认为他们需要更改每个内存调用以使其与MEX兼容。 - Bill Cheatham
谢谢!重写正是我想要避免的,因为该库仍在开发中,这将导致我有两个库实例,一个用于C/C++工作,另一个用于MATLAB原型设计。 - Andreas Mieritz
请记住,还有一些我不完全确定的微妙之处。例如,如果 Mex 文件被中断(例如通过错误),通过标准 C 方法分配的内存可能无法正确释放... 如果了解此问题的人能提供更多信息,将不胜感激! - Bill Cheatham
1个回答

7

您只需使用MxAlloc来处理返回给Matlab的数据。您库中的所有内容都可以正常分配。

您需要注意的一个问题是,您的库随时可能被卸载。通常情况下,当用户调用您的mexFunction时,库会被加载,并将保持加载状态以供后续调用。但是,在任何时候,Matlab都可能卸载您的库,因此您mexFunction中的所有资源都将被释放。


3
必要时,您可以使用mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.html 来防止卸载您的mex文件。 - Edric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接