Perl子例程中的变量不会释放内存
发布时间:2020-12-15 23:20:55 所属栏目:大数据 来源:网络整理
导读:我有一个关于子程序中的变量何时以及如何释放内存的问题.该脚本是一个例子: #!perl/bin/peruse strict;sub A{ my $x= shift; return ([$x]);}for my $i (1..10){ my $ref= A($i);## the input changes in each round my $ref2= A(9);## the input is fixed
我有一个关于子程序中的变量何时以及如何释放内存的问题.该脚本是一个例子:
#!perl/bin/per use strict; sub A{ my $x= shift; return ([$x]); } for my $i (1..10){ my $ref= &A($i);## the input changes in each round my $ref2= &A(9);## the input is fixed in each round print "$reft"; print "$ref2n"; } 并且屏幕上的输出是: ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) ARRAY(0x996e98) ARRAY(0x9b50c8) 我预计在子程序A被调用多次时应该更改引用,但无论何时更改输入,输出引用都是固定的.这种现象是否可以推断,在整个脚本结束之前,子程序中变量占用的内存永远不会被释放?否则,我的结果是不寻常的? 解决方法
>对A($i)的调用在perl认为方便可用的任何位置分配新的arrayref.
>该数组引用返回到您的循环体,并存储在一个词法范围到该循环体的变量中. >在循环的底部,变量超出范围,并且由于没有其他内容引用该arrayref,因此释放了arrayref. >因此,以前保存arrayref的内存位置再次方便可用,并在下次需要时重新使用…在下次调用A()时 >转到1 如果阻止数组被释放,您将看到在不同地址创建的新数组. my @a; for my $i (1..10){ my $ref= &A($i);## the input changes in each round my $ref2= &A(9);## the input is fixed in each round print "$reft"; print "$ref2n"; push @a,$ref,$ref2; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |