我正在使用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
中的数据量。
答案 0 :(得分: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 *数组一起正常工作,这样可以正常工作而不会出现内存泄漏。如果有任何优雅的解决方案,请告诉我。