我想删除整个数组。目前我做@array=();
它是否删除元素并清除内存,垃圾收集?如果不是,我需要使用Splice吗?
my
意味着很少需要清空阵列。@array = ();
将释放元素,并在必要时调用任何析构函数。换句话说,如果没有在其他地方使用,则根据需要将元素进行垃圾收集(在操作甚至结束之前)。@array = ();
不释放底层数组缓冲区。这是一件好事。 undef @array;
会强制释放内存,这会在你开始在数组中放入更多元素时强制进行大量分配。所以,
my @array;
放在正确的位置,将其范围限制在您需要的位置。
{
my @array;
...
} # Elements of @array garbage collected here.
@array = ();
。
my @array;
while (...) {
if (...) {
push @array, ...;
} else {
... use @array ...
@array = (); # Elements of @array garbage collected here.
}
}
undef @array;
。如果方便的话你可以使用splice
。
say for @array;
@array = ();
可写成
say for splice(@array);
但这不会影响垃圾收集。
@array = ();
很好,你也可以使用
undef @array;
请注意,这是错误的:
@array = undef;
它的值为undef
如果您的目标是将内存释放回操作系统,那么您可能会运气不好。如果你的目标是让你的perl程序的内存可以再次使用,那么其他答案都是好的。
有关更多详细信息,请查看以下链接 http://www.perlmonks.org/?node_id=243025 In Perl, how can I release memory to the operating system?
所有这些食谱都没有帮助我,但我找到了一个新的食谱:
my @tmp_arr = qw();
@array = @tmp_arr;