and here's the same script under Win32 (NT 4.0/2000/XP):
use Win32::API 0.20;
my $GCP = new Win32::API(
"kernel32", "GetCurrentProcess", "", "N"
) or die "Can't import API: $^E";
my $GPMI = new Win32::API(
"psapi", "GetProcessMemoryInfo", "NPN", "N"
) or die "Can't import API: $^E";
our @test;
print "nothing : Size = ".size()."\n";
push @test, rand for (1..100000);
print "push : Size = ".size()."\n";
#undef @test;
@test = ();
print "deleted : Size = ".size()."\n";
sub size {
my $handle = $GCP->Call();
my $m = pack("LLLLLLLLLL", 16*10, 0 x 10);
$r = $GPMI->Call( $handle, $m, 160 );
my $pwss = (unpack("LLLLLLLLLL", $m))[2];
return int($pwss/1024)." kB";
}
interestingly enough, the figures are different here:
if I use
@test = ();, output is:
nothing : Size = 2252 kB
push : Size = 4776 kB
deleted : Size = 4776 kB
and with
undef @test;
nothing : Size = 2252 kB
push : Size = 4776 kB
deleted : Size = 4776 kB
both solutions don't free any memory at all.
cheers,
Aldo
__END__
$_=q,just perl,,s, , another ,,s,$, hacker,,print;