On Wed, 2002-05-29 at 15:26, drieux wrote:
>
> On Wednesday, May 29, 2002, at 09:06 , Jackson, Harry wrote:
>
> >> -----Original Message-----
> >> From: F.Xavier Noria [mailto:[EMAIL PROTECTED]]
> >>
> >> What would be the shortest code that leak?
> >
> > Its not really the length as much as the width of the whole that causes a
> > leak.
>
>
> well you could write a self referential function
>
> sub sillyMe {
> my ($arg ) = @_
> my $value = $arg + time + 1;
> sillyMe($value);
> }
>
> sillyMe(1);
>
>
> that wouldn't really 'leak' but it would buy you a
> stack frame for each call - and some arguments each
> time through until you ran out of heap....
>
> ciao
> drieux
One way to create a memory leak (at least while a script is running) is
to use circular references:
<code>
#!/usr/bin/perl
use strict;
for (0..1000000) {
my $a = 8; #$a's reference count is set to 1
my $b = 10; #$b's reference count is set to 1
#$a leaves scope so is reference count is decremented by 1
#$b leaves scope so is reference count is decremented by 1
} #$a and $b's reference counts are 0 so the get GC'ed
system("ps -o rss,pid,cmd | grep $$ | grep -v grep");
for (0..1000000) {
my $a; #$a's reference count is set to 1
my $b; #$b's reference count is set to 1
$a = \$b; #$b's reference count is incremented by 1
$b = \$a; #$b's reference count is incremented by 1
#$a leaves scope so is reference count is decremented by 1
#$b leaves scope so is reference count is decremented by 1
} #$a and $b's reference counts are both still 1 so they don't get GC'ed
system("ps -o rss,pid,cmd | grep $$ | grep -v grep");
#program ends and the real GC code cleans up the mess
</code>
<output>
1224 7565 /usr/bin/perl ./hog.pl
33108 7565 /usr/bin/perl ./hog.pl
</output>
--
Today is Prickle-Prickle the 3rd day of Confusion in the YOLD 3168
Kallisti!
Missile Address: 33:48:3.521N 84:23:34.786W
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]