Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: High memory usage on // substitution in one situation, normal usage in other

On May 21,  9:28am, Sebastian Gniazdowski wrote:
} following will cause like 55 GB of VIRT memory usage (process will
} be killed), having RES memory at 1.8 MB, which roughly equals to
} ${#__text}.

I can't reproduce this.  The for loop takes a lot longer to create the
array than does the simple assignment, but neither example uses a huge
amount of memory.

Since you had a "local -A arr2" in your first example, I ran each of
the examples in an anon function in a fresh shell.  I also tried the
second example both with "local -a arr" added, and as you posted it,
but that didn't really make any difference.

On my system, the associative arr2 case looks like this:

swap    free
412780  81244
(skip gradual shrinking during "for" loop)
412780  33260
412780  33260
412780  58668

The second like this:

swap    free
412780  81420
412780  38092
412780  36748
412780  36772
412780  31524
412780  22692
412780  66532

The $__text value is global in both cases so the delta between the first
and last "free" numbers is the memory consumed by that plus any unused
space in the last unpopped zsh heap block.

In both cases the // expression is almost instantaneous, much faster than
creating the $__text string in the first place.  Neither uses any swap.
My config.h defines HAVE_MMAP 1, so the zsh heap is allocated as an
anonymous mapfile, but I don't have 55GB free on the filesystem so I
don't think that can be a factor.

Messages sorted by: Reverse Date, Date, Thread, Author