Well this example does not demonstrate the problem it demonstrates the solution to let perl free memory allocated once by setting the variable to undef ;-)
---------------8<--------------- #!/usr/bin/perl &bla(); print "Done"; my $bla = <STDIN>; sub bla { my $var = ""; for( 1 .. 10_000_000 ) { $var .= "xxx"; } # undef $var; # The solution to wipe out allocated memory # by explicitly setting vars to undef } ---------------8<--------------- Tom Tom Schindl wrote: > You can try memory management yourself and see that the memory allocated > is not wiped until the script is finished. > > --------------------8<-------------------- > #!/usr/bin/perl > > &bla(); > print "Done"; > > sub bla { > my $var = ""; > for( 1 .. 10_000_000 ) { > $var .= "xxx"; > } > > my $bla = <STDIN>; > undef $var; > } > --------------------8<-------------------- > > You can modify this example to use threads and see what's happeing to > your memory. > > Tom > > > Foo Ji-Haw wrote: > >>Hello Carl, >> >> >>>Nope that's right, so you load up one image. The perl process >>>allocates itself 100MB of memory for it from the OS. Then doesn't >>>release it back to the OS once it's finished with. >>> >>>The perl process will re-use this memory, so if you process another >>>image you don't grab another 100MB, it's just not available at the OS >>>level or for other processes. >>> >>>This isn't completely bad as long as your OS has good memory >>>management. The unused memory in the perl process will just be swapped >>>out to disk and left there until that process uses it again or exits. >> >>Can I confirm that in the Windows implementation, if a thread allocates >>requires 100MB of memory and then releases it, the next thread can reuse >>that memory? >> >>Thanks. >> >> > >
signature.asc
Description: OpenPGP digital signature