我需要使用Matlab釋放內存而沒有清除命令(我在並行工具箱的parfor循環內,我無法調用清除);我讀的是,例如,代替沒有清除命令的MATLAB可用內存
clear v
我可以設置
v=[]
的問題是:與「= []」我解除分配的「V」的存儲器中或只設置v到一個空值和先前的內存仍然分配,然後無法使用? 謝謝
我需要使用Matlab釋放內存而沒有清除命令(我在並行工具箱的parfor循環內,我無法調用清除);我讀的是,例如,代替沒有清除命令的MATLAB可用內存
clear v
我可以設置
v=[]
的問題是:與「= []」我解除分配的「V」的存儲器中或只設置v到一個空值和先前的內存仍然分配,然後無法使用? 謝謝
您閱讀正確。這裏有一個演示:
我的電腦的內存,現在(清除工作區後,但也有一些剩菜和情節到位):
>> 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.
可以很容易地找到的功能的幫助「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;
沒有打印,內存中沒有變量。
好!然後清除v和v = []似乎是同一件事! – volperossa
@ Pursuit你的方法只適用於大尺寸的x。當x的尺寸很小時,如x = 1。你的方法無法工作。 – lihaitao
變量'v'仍然存在,需要非常少量的內存(列爲0,但必須存在一些開銷)。如果'v'的前一個值需要大量內存(原始問題),那麼這可能是一個很大的優勢。如果'v'的前一個值需要8個字節(例如'v = 1'),那麼確實沒有理由這樣做。也沒有理由運行'清除v'。 – Pursuit