我有一个程序可以创建一个C结构,其中包含各种基本数据类型的大数组(整数等)。对于我来说,从C函数函数将此数据返回到Matlab的最有效内存的方法是什么,同时还要确保所有内存释放都经过精心处理?理想情况下我想返回整个结构,但是单独返回每个数组的方法也是可以接受的。
您也可以假设我理解编写mexfunctions和使用将数据复制到plhs指针指向的数组的基本方法返回参数的基础知识。据我了解,这将创建一个内存副本,即需要双倍的内存,如果这是不正确的纠正我。
答案 0 :(得分:1)
我的问题现已在另一个论坛here得到解答。以下是给出的答案:
“您不能将本机C / C ++内存(即本地堆栈变量或已分配的变量与malloc& cousins)混合到mxArray中以返回到MATLAB工作区。这最终会导致MATLAB在尝试释放时崩溃所以你不得不复制这个记忆。我认为你的选择是:
1)使用MATLAB API函数重写代码以创建C / C ++结构mxMalloc&表兄弟代替原生C / C ++函数malloc&朋友。然后可以将此内存直接附加到mxArray结构以返回到MATLAB工作空间...不需要重复或取消分配。
2)用mxMalloc& amp;创建你的MATLAB结构。表兄弟,因为你逐步释放了C / C ++内存。这仍然需要您暂时复制最大的块,但不会同时复制内存中的所有内容。
3)忽略我对混合原生C / C ++内存和MATLAB API内存的看法。玩黑客入mxArray游戏混合它们,在mex例程中保留它们的共享数据副本,以防止MATLAB试图释放内存。这非常棘手,不推荐使用,因为如果不能正确管理所有内容,就很容易泄漏内存和/或崩溃MATLAB。
它不会为你节省大量内存,而是将几个单独的变量返回给MATLAB而不是返回一个结构或单元格数组,所以只需根据你的用途返回更容易创建和管理的内容。“-James Tursa