Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Unix上访问Matlab中的内存信息-相当于user view.maxPossibleAryBytes_Matlab_Unix_Memory - Fatal编程技术网

如何在Unix上访问Matlab中的内存信息-相当于user view.maxPossibleAryBytes

如何在Unix上访问Matlab中的内存信息-相当于user view.maxPossibleAryBytes,matlab,unix,memory,Matlab,Unix,Memory,我正在寻找在unix上的windows平台上,在matlab中由内存返回的等效数据 我知道使用unix(“vm_stat”)的可能性,但我需要的信息的具体部分是最大的连续可用内存块 此信息由内存返回,如下所示: [userview, ~] = memory; a = userview.MaxPossibleArrayBytes 有人不知道如何编写可以返回相同信息的unix命令吗?调用命令“free”并解析结果。这在linux上工作 [r,w] = unix('free | grep Mem')

我正在寻找在unix上的windows平台上,在matlab中由内存返回的等效数据

我知道使用unix(“vm_stat”)的可能性,但我需要的信息的具体部分是最大的连续可用内存块

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

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

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

调用命令“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为单位。自由返回的最后一个数字是操作系统使用的“缓存”内存,例如动态库。通常可以使用它,但您可以决定不使用它,只使用自由报告中的“free”——输出中的第三个数字字段

编辑在Linux上,MATLABs mxMalloc/mxCalloc中的内存分配很可能只是调用malloc和friends。要得到这种情况的提示,请进行以下实验。在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上运行上面的代码。这段代码崩溃了。当然,您不应该在代码中这样做。这仅仅说明了这一点。

谢谢-不过有几个问题-第一个问题是osx上不提供免费服务。不过,还有其他方法可以获得这些信息。但是-看起来您正在匹配可用的总内存,我想要的是可用的最大连续块?我认为从用户的角度来看,物理连续内存块在OSX上没有任何意义。我知道MATLAB声称他们使用连续内存来存储阵列,但对于虚拟内存操作系统,分配的内存总是“虚拟”连续的。只有在特殊情况下才需要物理连续内存(内核代码、设备映射内存)。我真的不认为MATLAB有任何方法来执行物理上连续的分配。此外,我几乎可以肯定他们只是使用malloc和friends。查看编辑后的注释,找到一段代码,说明我为什么这么认为。我环顾四周,找到了。这个家伙反复尝试分配内存,如果他失败了,就会减少数组的大小。我强烈建议您不要做这样的事情:)取决于配置,但最终您可能会交换很多,而不是获得OOM..太好了。谢谢你的时间-我现在被出卖了!我的代码涉及读取一个非常大的文件,因此我将只在mem-free上工作,而不必担心在这个平台上的连续分配。不管怎么说,它似乎起作用了。BW史蒂文(注:我将投票赞成你的答案,一旦我得到15名)