加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:57:24 所属栏目:百科 来源:网络整理
导读:我有Matlab代码调用从c代码生成的MEX. c代码在初始化时需要大量内存分配和计算. 使用静态指针,仅在第一次调用时进行初始化,并在后续调用中读取指针. 在使用Matlab编译器编译Matlab代码之前,一切正常.现在随后对MEX的调用(现在在matlab编译的代码中发生)最终
我有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并使用loadLibrary function in Matlab.这样,当您创建静态时,它应该在调用之间保留在内存中.但我还没有证实这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读