想象一下,我有一个指向包含许多无数数组的数组的引用。例如:
my @main_array = ( [1,2,3], [3,4,5], ['a','b','c'] );
my $reference = \@main_array
如果稍后我已经完成了使用该数组中的数据并且我只引用了它,那么删除该数组并释放内存的最佳方法是什么? 我通常会执行以下操作以释放数据在简单数组中使用的内存:
undef @array
但是因为我只提到了它,所以我考虑过这样做
undef @{$reference}
如果我这样做,我不会只删除对存储在数组中的匿名数组(main_array
)的引用,而不是删除匿名数组的实际内容吗?
我想我的问题可以简化为:删除引用是否会使Perl释放由引用引用的数组,散列或标量所使用的内存?
谢谢
答案 0 :(得分:7)
是的,undef @{$reference}
(或undef @$reference
)会执行undef @array
所做的事情。它将释放阵列使用的几乎所有内存,以便程序可以重用。
但很少有任何理由这样做。当你的词汇$reference
超出范围时,同样的事情就会发生。首先明确地调用它undef
只会让你的代码慢一点。
答案 1 :(得分:1)
如果稍后我完成了使用该数组中的数据并且我只引用了它,那么删除该数组并释放内存的最佳方法是什么?
理想情况下,让$reference
超出范围。否则,您可以使用$reference = undef;
。