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 に答える