http://www.perlmonks.org?node_id=470594


in reply to Re^2: memory "release" with $#=-1
in thread memory "release" with $#=-1

my $a = []; $a->[$_] = $_ for 0..999; $#$a = 1; # frees up approx 16000 bytes undef @$a; # frees a further 4000 bytes undef $a; # frees a further 52 bytes
Note that this frees memory to the perl interpter, not to the OS. ie perl can reuse that memory when creating further data, but other processes can't

update: to clarify: just doing the undef $a on its own would free up all 20052 bytes too.

Dave.

Replies are listed 'Best First'.
Re^4: memory "release" with $#=-1
by ISAI student (Scribe) on Jun 28, 2005 at 14:01 UTC
    OK. That's great, I'll use it to free up memory. Thanks for all your help. -ISAI student
Re^4: memory "release" with $#=-1
by waswas-fng (Curate) on Jun 28, 2005 at 19:22 UTC
    One note though, if you create the array peicemail over time, then you may have smaller portions of memory allocated for the array that are not contiguous. In that case freeing the array and making a new array may not use the freed memory if the new array has larger malloc needs then the freed memory has contiguous memory segments.


    -Waswas
      I'm pretty sure perl arrays always take up a contiguous region of memory, at least for the actual "array" part. Then again, it's just an array of pointers to SV's anyways, so I'm not sure it matters.