2

我在下面做一个循环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);
}

PS:每个循环的内存泄漏约为 192 MB,这正是 array 中的数据量B

4

1 回答 1

0
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 * 数组一起工作得很好,这在没有内存泄漏的情况下工作得很好。如果有任何优雅的解决方案,请告诉我。

于 2013-03-12T04:53:17.223 回答