删除对可用内存的引用

时间:2017-03-22 14:50:07

标签: perl memory reference

想象一下,我有一个指向包含许多无数数组的数组的引用。例如:

my @main_array = ( [1,2,3], [3,4,5], ['a','b','c'] );
my $reference = \@main_array

如果稍后我已经完成了使用该数组中的数据并且我只引用了它,那么删除该数组并释放内存的最佳方法是什么? 我通常会执行以下操作以释放数据在简单数组中使用的内存:

undef @array

但是因为我只提到了它,所以我考虑过这样做

undef @{$reference}

如果我这样做,我不会只删除对存储在数组中的匿名数组(main_array)的引用,而不是删除匿名数组的实际内容吗?

我想我的问题可以简化为:删除引用是否会使Perl释放由引用引用的数组,散列或标量所使用的内存?

谢谢

2 个答案:

答案 0 :(得分:7)

是的,undef @{$reference}(或undef @$reference)会执行undef @array所做的事情。它将释放阵列使用的几乎所有内存,以便程序可以重用。

但很少有任何理由这样做。当你的词汇$reference超出范围时,同样的事情就会发生。首先明确地调用它undef只会让你的代码慢一点。

答案 1 :(得分:1)

  

如果稍后我完成了使用该数组中的数据并且我只引用了它,那么删除该数组并释放内存的最佳方法是什么?

理想情况下,让$reference超出范围。否则,您可以使用$reference = undef;