繁体   English   中英

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

[英]Memory sharing between Matlab and C++ in 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会在适当的时候删除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM