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;
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.