c++ - MEX 中 Matlab 和 C++ 之间的内存共享

标签 c++ c matlab mex

我目前正在尝试编写一个程序来处理一个相当大的文件 (~16GB),然后对其进行分析。理想情况下,我会在 C/C++ 中进行数据处理(我已经编写了一个高效的实现),然后在 Matlab 中进行分析以利用其高效的算法和易用性。

我的自然倾向是在程序开始时使用 MEX 调用用 C 编写的例程,然后在 Matlab 中继续。我想知道的(以及出于某种原因我似乎无法在网上找到的内容)是如果我使用此方法共享内存的方式:

假设我要在 C 中创建一个大型堆分配数组以传递给 Matlab。在我的 Matlab 函数可以处理它之前,这个数组是否需要在内存中复制,或者 Matlab 是否能够直接访问原始数组,而无需额外的复制?我假设并希望这会以第二种方式起作用,但我宁愿在花费时间和精力之前先确定一下。

最佳答案

如果为此使用Matlab提供的函数,确实可以共享内存。例如,要创建一个传递回 matlab 的矩阵,您可以使用如下内容:

plhs[0] = mxCreateNumericArray(2, out_dims, mxDOUBLE_CLASS, mxREAL);
double *result = mxGetPr(plhs[0]);

这将创建一个数组,matlab 稍后将使用该数组。您使用 *result 填充它,并且由于内存是使用 mx 函数分配的,因此 matlab 将在适当的时候删除它。

关于c++ - MEX 中 Matlab 和 C++ 之间的内存共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814243/

相关文章:

c++ - 返回小结构的虚函数 - 返回值与输出参数?

c++ - 使用 CMake 构建 Boost 系统库?

c++ - 为什么使用 std::stack 或 std::queue?

c - B 树删除节点时的段错误

matlab - 3D 中切片的线性组合

matlab - 为什么替换矩阵的 NaN 不适用于 k(k==NaN) = SomeNumber ,其中 k 是要操作的矩阵

C++ 对象在内存中是连续的吗?

c - 无法从内核模块中的 net_device 获取 mac 地址

c++ - initialized struct的指定初始化

arrays - 串联元胞数组