如何避免重复初始化.mex (matlab编译代码)
How to avoid duplicate initialization of .mex (matlab compiled code)?
我有Matlab代码,调用从c++代码生成的MEX。c++代码在初始化时需要大量的内存分配和计算。使用静态指针,只在第一次调用时进行初始化,在后续调用时读取指针。
一切都工作得很好,直到这个Matlab代码使用Matlab编译器编译。现在对MEX的后续调用(现在发生在matlab编译的代码中)最终会崩溃,因为静态指针显然引用了无效的内存。
在这种情况下,如何避免重复初始化?谢谢,狮子座
问得好。您可能必须将其分解为两个不同的mex函数,一个计算初始化并返回其结果,另一个执行您的函数。
[heavyCompResults,otherHeavyResults] = initComputation(initParams);
:
performComputation(compParams,heavyCompResults,otherHeavyResults);
或者,您可以将内容写在文件中,而不是通过Matlab传递。
initComputation(initParams,initResultsFname); %writes initResultsFname
:
performComputation(compParams,initResultsFname); %reads initResultsFname
另一个选项:
将您的代码转换为DLL并在Matlab中使用loadLibrary
函数。这样,当您创建静态时,它应该在调用之间保留在内存中。但我还没有验证过。
我不确定你是否已经解决了你的问题,但是这里有一些相关的信息对我有帮助。
这似乎与我遇到的问题相似。在编译同一函数的新版本时(其中一个有内存访问问题),我发现旧版本的mex函数实际上并没有离开内存。我尝试了很多事情,包括(据说)使用clear mex-file-name从matlab内存中清除mex函数。唯一成功的方法来防止重复访问相同的有缺陷的mex函数我发现是重新启动matlab。这每次都修复了内存问题。虽然这种情况和解决方案不完全匹配您的问题,我的建议是尝试重新启动matlab。
相关文章:
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- C++使用 MATLAB 引擎和 g++ 进行源代码编译
- 当未选择 /CLR时,编译的MATLAB代码崩溃
- 为 OpenCV 编译 MATLAB 绑定
- 从C 调用的编译MATLAB函数的输入参数结构
- 在Matlab中使用OS X编译/混合imrender函数时出错
- 使用matlab引擎编译c++程序eclipse
- 如何从 C 调用在 MATLAB 中创建并用 C 编译的函数
- 如何使用Visual c ++编译器在MATLAB中编译vlfeat和mexopencv库
- 如何使用 mwArray 将字符串向量发送到 MATLAB 编译的 DLL
- 使用 mex 在 Matlab 中编译C++失败
- 将 MATLAB 函数编译成可以在 linux 终端上运行的东西,w.out MATLAB
- C++ MATLAB 中的 MEX 编译
- 在 Ubuntu 上使用 Mingw64 交叉编译 Matlab oct 文件时出现问题
- Matlab Mex代码未编译
- MATLAB + Mex + OpenCV:正确链接和编译,但在运行时找不到库
- MATLAB中的Myo臂章手势(无法编译.m或.mex文件)
- 在64位机上编译32位matlab应用程序(c++)
- 如何避免重复初始化.mex (matlab编译代码)
- CUDA-Matlab 编译中C++指针的问题