2013-07-12 28 views
2

我需要使用Matlab释放内存而没有清除命令(我在并行工具箱的parfor循环内,我无法调用清除);我读的是,例如,代替没有清除命令的MATLAB可用内存

clear v 

我可以设置

v=[] 

的问题是:与“= []”我解除分配的“V”的存储器中或只设置v到一个空值和先前的内存仍然分配,然后无法使用? 谢谢

回答

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. 
+0

好!然后清除v和v = []似乎是同一件事! – volperossa

+0

@ Pursuit你的方法只适用于大尺寸的x。当x的尺寸很小时,如x = 1。你的方法无法工作。 – lihaitao

+0

变量'v'仍然存在,需要非常少量的内存(列为0,但必须存在一些开销)。如果'v'的前一个值需要大量内存(原始问题),那么这可能是一个很大的优势。如果'v'的前一个值需要8个字节(例如'v = 1'),那么确实没有理由这样做。也没有理由运行'清除v'。 – Pursuit

1

可以很容易地找到的功能的帮助“whos'.For例如答案,我创建了一个变量v = 1。

v=1; 

型 '卫生组织',我们可以发现所有的变量在内存中:

whos; 
    Name  Size   Bytes Class  Attributes 

    v   1x1     8 double 

,我们可以发现在内存中的变量v。 后来我尝试 '删除' V:

v=[]; 

型 '卫生组织',以检查它是否删除或不:

whos 
    Name  Size   Bytes Class  Attributes 

    v   0x0     0 double    

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

clear; 
whos; 

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