我需要使用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