Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Does undef free ram?

by zejames (Hermit)
on Jul 17, 2002 at 08:12 UTC ( [id://182355]=note: print w/replies, xml ) Need Help??


in reply to Does undef free ram?

Here is a little script for linux only that can help to understand what happens to memory:

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 { open DATA, "< /proc/$$/status" or die "Unable to read data : $!\n"; local $/; <DATA> =~ m/^VmSize:\s+(.*?)$/m; return $1; }

If I use @test = ();, output is
nothing : Size = 2988 kB push : Size = 5492 kB deleted : Size = 5492 kB

and with undef @test;
nothing : Size = 2988 kB push : Size = 5488 kB deleted : Size = 4976 kB

Of course, this example is OS dependant. But you can notice that the first solution does not free any OS memory at all. As FatVamp said, Perl can then reuse the memory. It can be noticed that a few more memory is freed when using undef, but not all that was used.

HTH

--
zejames

Replies are listed 'Best First'.
Re: Re: Does undef free ram?
by dada (Chaplain) on Jul 18, 2002 at 10:26 UTC
    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;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://182355]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (1)
As of 2024-04-19 00:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found