使用matlab的mex文件进行内存管理

时间:2014-12-16 15:30:31

标签: c++ matlab mex

我有一个与uEye USB3相机通信的mex文件,以输入参数指定的分辨率和帧率捕获一段视频,并将其导出为.tif图像的堆栈。在mex文件返回之前,我释放了用于存储图像的缓冲区,但是这个内存不再可用于系统,它似乎仍然分配给matlab。进一步调用mex函数似乎可以重用这个内存,但是如果不重新启动matlab,我就无法将它释放到更广泛的系统中。运行clear mexclear all似乎对此没有影响,确实clear all偶尔会因为分段错误而使matlab完全崩溃。我很确定这不是我的C ++的错误,因为如果我在直接C ++中重写相同的函数,我会看到内存被释放应该是。

使用

取消分配我的记忆
is_UnlockSeqBuf(hCam, nMemID, pBuffer);
is_ClearSequence (hCam);
int k=0;
while (k < frame_count){
    int fMem = is_FreeImageMem(hCam, pFrameBuffer[k], pFrame[k]);
    k++;
}
先前已经分配了

for (int i = 0; i < frame_count;i++){
    int nAlloc = is_AllocImageMem (hCam, width,height, 24, &pFrameBuffer[i], &pFrame[i]);
    int nSeq = is_AddToSequence(hCam, pFrameBuffer[i], pFrame[i]);
    pFrame[i] = i + 1;
}

有没有人对如何在不重启matlab的情况下释放内存有任何想法?

0 个答案:

没有答案