gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:40 31 4
gpt4 key购买 nike

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

在使用 Matlab Compiler 编译此 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 .这样,当您创建静态时,它可能应该在调用之间保留在内存中。但我还没有验证这一点。

关于c++ - 如何避免重复初始化 .mex(matlab 编译代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377490/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com