【问题标题】:Memory leak in MexMex 中的内存泄漏
【发布时间】:2013-05-31 17:17:56
【问题描述】:

我正在使用dims = [1024 768 256] 循环执行以下操作。我想将block_iter(1 到 16)加载的一组块读入硬件 RAM。内存调用似乎显示内存泄漏。我在某处做错了吗?

for (block_iter = 1; block_iter <= num_blocks; block_iter++)
{
    //Allocate memory to read data;
    mxArray *B= mxCreateNumericArray(3, dims, mxUINT8_CLASS, mxREAL); // Pointer to mxArray
    mxArray *in = mxCreateDoubleMatrix(1, 1, mxREAL);

    mexCallMATLAB(0, NULL, 0, NULL, "memory");
    memcpy(mxGetPr(in), &block_iter, sizeof(double)*1*1);
    mexCallMATLAB(1, &B, 1, &in, "data_feeder");

    //Call RAM_FILL
    ram_fill(d,B);

    //Deallocate memory;
    mxDestroyArray(B);
    mxDestroyArray(in);
}

P.S:每个循环的内存泄漏约为 192 MB,这正是数组 B 中的数据量。

【问题讨论】:

    标签: matlab memory-leaks mex


    【解决方案1】:
    for (block_iter = 1; block_iter <= num_blocks; block_iter++)
    {    
            mxArray *B;// = mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL); //Pointer to mxArray
            mxArray *ppLhs[1];
            mxArray *in = mxCreateDoubleMatrix(1, 1, mxREAL);
    
    //         mexCallMATLAB(0,NULL,0,NULL,"memory");
            memcpy(mxGetPr(in), &block_iter, sizeof(double)*1*1);
            mexCallMATLAB(1, ppLhs,1,&in,"data_feeder");
            B = ppLhs[0];
            //Call RAM_FILL
            ram_fill(d,B,block_iter);
    //         mexPrintf("BlockIter %d\n",(int)block_iter);
            //Deallocate memory;
            mxDestroyArray(B);
            mxDestroyArray(in);
    }
    

    我这样做是因为 mxCallMatlab 与 mxArray * 的数组一起工作得很好,这工作得很好,没有内存泄漏。如果有任何优雅的解决方案,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2015-12-01
      • 2010-12-20
      • 2020-05-26
      • 2012-08-20
      相关资源
      最近更新 更多