6

我在 matlab 中寻找与 Windows 平台上的内存返回的数据等效的数据。

我知道使用 unix('vm_stat') 的可能性,但我需要的特定信息部分是最大的连续空闲内存块。

此信息由内存返回,如下所示:

[userview, ~] = memory;
a = userview.MaxPossibleArrayBytes

有没有人不知道如何编写一个可以返回相同信息的 unix 命令?

4

1 回答 1

9

调用命令“free”并解析结果。这适用于linux

[r,w] = unix('free | grep Mem');
stats = str2double(regexp(w, '[0-9]*', 'match'));
memsize = stats(1)/1e6;
freemem = (stats(3)+stats(end))/1e6;

输出以 GB 为单位。最后一个免费返回的数字是操作系统使用的“缓存”内存,例如动态库。它通常可以使用,但您可以决定不使用它,只使用免费报告作为“免费” - 输出中的第三个数字字段。

编辑在 Linux 上,MATLAB 中的内存分配 mxMalloc/mxCalloc 很可能只是调用 malloc 和朋友。为了得到提示,请执行以下实验。在 mex 文件中,使用以下代码分配一个数组,并将其返回给 MATLAB:

  rout = calloc(sizeof(Double),M*N);
  pargout[0] = mxCreateNumericMatrix(0,0,mxDOUBLE_CLASS,mxREAL);
  mxSetM(pargout[0], m);
  mxSetN(pargout[0], n);
  mxSetData(pargout[0], rout);
  mexMakeMemoryPersistent(rout);

您通常可以使用 MATLAB 中返回的变量。您甚至可以清除它 - 这不会导致任何问题。如果 MATLAB 确实只使用 malloc,那么我不知道它们可以强制执行物理上连续的内存。

我知道你不能在 Windows 上运行上面的代码。此代码使 MATLAB 崩溃。当然,你不应该在你的代码中这样做。它只是说明了这一点。

于 2012-09-10T11:24:07.737 回答