2013-07-12 120 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; 

沒有打印,內存中沒有變量。