【问题标题】:Memory sharing between Matlab and C++ in MEXMEX 中 Matlab 和 C++ 之间的内存共享
【发布时间】:2015-08-05 00:55:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ c matlab mex


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢!这正是我想要的。
    猜你喜欢
    • 2021-06-01
    • 2016-07-17
    • 2018-03-19
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2013-05-09
    • 2023-03-31
    • 2012-07-06
    相关资源
    最近更新 更多