我想删除整个数组。目前我做@array=();
它是否删除元素并清除内存,收集垃圾?如果不是,我需要使用 Splice 吗?
问问题
8973 次
5 回答
15
您需要这样做非常奇怪。正确使用
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);
于 2013-07-30T01:00:18.870 回答
3
@array = ();
很好,你也可以使用
undef @array;
请注意,这是错误的:
@array = undef;
它的价值为undef
于 2013-07-30T00:54:02.020 回答
1
如果您的目标是将内存释放回操作系统,那么您可能不走运。如果您的目标是让您的 perl 程序可以再次使用内存,那么其他答案都很好。
有关更多详细信息,请查看以下链接
http://www.perlmonks.org/?node_id=243025
在 Perl 中,如何向操作系统释放内存?
于 2013-07-30T01:28:46.820 回答
0
于 2013-07-30T00:52:42.760 回答
0
所有这些食谱都没有帮助我,但我找到了一个新的:
my @tmp_arr = qw();
@array = @tmp_arr;
于 2018-09-06T12:20:39.170 回答