如何避免重复初始化.mex(matlab编译代码)?

时间:2011-09-11 10:02:45

标签: c++ matlab mex matlab-compiler

我有Matlab代码,它调用从c ++代码生成的MEX。 c ++代码在初始化时需要大量内存分配和计算。 使用静态指针,仅在第一次调用时进行初始化,并在后续调用中读取指针。

在使用Matlab编译器编译Matlab代码之前,一切正常。现在随后对MEX的调用(现在在matlab编译的代码中发生)最终崩溃,因为静态指针显然引用了无效的内存。

在这种情况下,可以采取哪些措施来避免重复初始化?

谢谢, 利奥

2 个答案:

答案 0 :(得分:1)

很好的问题。您可能必须将其分解为两个不同的mex函数,一个用于计算初始化并返回其结果,另一个用于执行函数。

  [heavyCompResults,otherHeavyResults] = initComputation(initParams);

然后:

  performComputation(compParams,heavyCompResults,otherHeavyResults);

或者,您可以在文件中写出内容,而不是通过Matlab传递它。

  initComputation(initParams,initResultsFname);  %writes initResultsFname

然后:

  performComputation(compParams,initResultsFname); %reads initResultsFname

还有一个选择:

将代码转换为DLL并使用loadLibrary function in Matlab。这样,当你创建静态时,它应该在调用之间留在内存中。但我还没有证实这一点。

答案 1 :(得分:0)

我不确定您是否已经解决了您的问题,但这里有一些相关信息对我有帮助。

这似乎与我遇到的问题类似。在编译同一函数的新版本时(其中一个版本存在内存访问问题),我发现旧版本的mex函数实际上没有留下内存。我尝试了很多东西,包括(据说)使用clear mex-file-name 从matlab内存中清除mex函数。我发现防止重复访问同一个有缺陷的mex函数的唯一成功方法是重启matlab。这每次都修复了内存问题。虽然这种情况和解决方案完全不符合您的问题,但我的建议是尝试重新启动matlab。希望有所帮助。