Mail Archives: cygwin/2007/01/22/14:26:42
> Hi,
>
> consider the following statement:
>
> $a = "a" x (100 * 1024 * 1024)
>
> When you create a script which does this over and over again, you'll
> observe a strange memory problem.
Can you show your script?
> By stracing I found that for each of these statements the following
> happens:
>
> "a" --> malloc (2 bytes)
> x 100 Megs --> realloc (100 Megs) + malloc (100 Megs)
>
> So the result is that each string of 100 Megs requires 200 Megs of
> memory. Doing this once is no problem, but doing it over and over
> again will hit the maximum memory available twice as early.
This is as I would expect. Most operators have a target, a temporary
lexical, allocated to store their results. Like all lexicals, these
hold on to any memory they have allocated in the hope of saving having
to allocate it a second time.
> I can only assume that either the garbage collector doesn't kick in when
> it should, or the garbage collector doesn't even know about this wasted
> memory, which would be a generic memory leak either way. However, it's
> not clear if this depends on the Perl version, or if it depends on the
> 64 bit int setting when building Perl.
I'd more likely suspect differences in the usemymalloc setting (perl
-V:usemymalloc). I'm not clear on exactly what you are seeing; again,
I'd like to see your test script.
--
I'm looking for a job: http://perlmonks.org/?node=ysth#looking
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -