删除对空闲内存的引用

Joh*_*Loo 1 memory perl reference

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

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

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

undef @array
Run Code Online (Sandbox Code Playgroud)

但因为我只提到它,所以我想这样做

undef @{$reference}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

yst*_*sth 7

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

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

  • @JohnnyLoo:如果您有临时数据,那么您应该通过使用`my`声明它并限制其范围来限制其生命周期,以便自动丢弃它.明确使用`undef`通常是设计不佳的标志.如果您的数据太大,那么您可能更好地使用内存中的SQLite数据库. (6认同)