Interesting. FWIW, on Windows 7 (monitoring with Task Manager) and running Strawberry 5.14.2.1, the program below will release (very) roughly half of the allocated memory when the undef $s is done. If the undef statement is changed to $s = ''; nothing is deallocated.
Half?!? What this means I do not know. (But see Update2 below.)
>perl -wMstrict -le "my $s = '.' x 500_000_000; sleep 5; undef $s; sleep 10; "
Update: Same results with Strawberry 5.10.1.5.
Update2: Actually, I think I understand a little of what is going on. From the Task Manager memory stats, when the '.' x 500_000_000 expression of the my $s = '.' x 500_000_000; statement executes, it consumes about 500M to build the string. The string is then copied to the $s scalar, thus consuming another 500M, for a total of 1G. It appears the first 500M (used to build the string) is never deallocated. Only the memory consumed by the $s scalar is deallocated when it is undef-ed.
In reply to Re^4: Memory management with long running scripts
by AnomalousMonk
in thread Memory management with long running scripts
by jamesrleu
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |