【发布时间】:2019-06-12 22:43:30
【问题描述】:
我正试图从 MATLAB 的 C MEX API 中了解mexMakeMemoryPersistent()。
我不明白 - 当一个 MEX 文件被多次调用时,mexMakeMemoryPersistent() 已被使用,当它被第二次调用时,它分配的内存是如何归还给 MEX 文件的?
例如,假设我有一个名为 myFunc 的 MEX 文件
它包含以下内容:
int* myVar = NULL;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if(myVar == NULL)
{
myVar = (int*)mxCalloc(sizeof(int*), 10);
mexMakeMemoryPersistent(myVar);
myVar[0] = 1;
}
// Do the thing I want with it
myVar[0] *= 2;
}
我们第一次这样做
fx>> myFunc()
在 MATLAB 内部,很明显myVar 将是NULL,然后mxCalloc 将获取一些内存并获取指向它的指针,等等。
但是在它返回之后又如何呢?然后被称为 second 时间:
fx>> myFunc()
我们告诉 MATLAB 不要破坏我们刚刚分配给 myVar 的内存。但是当myFunc 的新实例运行时,该指针如何重新分配给myVar?如果没有,myVar 将只是NULL,我们将回到第一方。它是否维护变量名称列表和分配给它们的内存?但是如果我们有奇怪的范围规则、继承(在 C++ 的情况下)等会发生什么?它如何解析什么变量需要被传递给那个指针,并实际进行切换?
我使用它没有问题,我只是想从概念上理解它,因为我认为它真的很整洁。
【问题讨论】:
标签: c matlab memory-management mex