没有明确命令的MATLAB空闲内存

时间:2013-07-12 16:59:12

标签: matlab memory-management shared clear parfor

我需要在没有明确命令的情况下使用Matlab释放内存(我在并行工具箱的parfor循环中,我无法调用清除);我读过这个,例如,而不是

clear v  

我可以设置

v=[]

问题是:使用'= []'我释放'v'的内存或者只是将v设置为空值而前一个内存仍然被分配然后无法使用? 感谢

2 个答案:

答案 0 :(得分:4)

你读得正确。这是一个演示:

我的计算机内存现在(清除工作区后,但有一些残羹剩饭和地块):

>> memory
Maximum possible array:            54699 MB (5.736e+10 bytes) *
Memory available for all arrays:            54699 MB (5.736e+10 bytes) *
Memory used by MATLAB:             1003 MB (1.052e+09 bytes)
Physical Memory (RAM):            32695 MB (3.428e+10 bytes)

*  Limited by System Memory (physical + swap file) available.

分配十亿个元素数组并再次检查内存:

>> x = rand(1e6,1e3);
>> memory
Maximum possible array:            46934 MB (4.921e+10 bytes) *
Memory available for all arrays:            46934 MB (4.921e+10 bytes) *
Memory used by MATLAB:             8690 MB (9.113e+09 bytes)
Physical Memory (RAM):            32695 MB (3.428e+10 bytes)

*  Limited by System Memory (physical + swap file) available.

将变量设置为[]。大多数记忆再次可用(注意损失很小):

>> x = [];
>> memory
Maximum possible array:            54578 MB (5.723e+10 bytes) *
Memory available for all arrays:            54578 MB (5.723e+10 bytes) *
Memory used by MATLAB:             1061 MB (1.113e+09 bytes)
Physical Memory (RAM):            32695 MB (3.428e+10 bytes)

*  Limited by System Memory (physical + swap file) available.

答案 1 :(得分:1)

在函数'whos'的帮助下很容易找到答案。例如,我创建一个变量v = 1.

v=1;

输入'whos',我们可以在内存中找到所有变量:

whos;
  Name      Size            Bytes  Class     Attributes

  v         1x1                 8  double   

我们可以在内存中找到变量v。 然后我尝试'删除'v:

v=[];

输入'whos'来检查是否删除:

 whos
  Name      Size            Bytes  Class     Attributes

  v         0x0                 0  double             

很明显,使用'v = [];'无法删除内存中的变量,而只是创建一个空变量。

clear;
whos;

没有打印,内存中没有变量。