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

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



Hello,
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}.

local -A arr2
for (( i=1; i<=200000; i++ )); do arr2[$i]="_"; done
elems=( "${(kv@)arr2}" )
__text=${elems[*]}
echo ${#__text}
1688894
__text="${__text//(#b)([^$'\03'-$'\07'$'\013'-$'\014'$'\016'-$'\031'$'0\037']##)/${(q)match[1]}}"

Follwing will work smoothly:

arr=( ${(s::)${(r:900000::_:)empty}} )
__text=${arr[*]}
echo ${#__text}
1799999
__text="${__text//(#b)([^$'\03'-$'\07'$'\013'-$'\014'$'\016'-$'\031'$'0\037']##)/${(q)match[1]}}"

I wonder why there is a difference between those two scenarios, why VIRT raises and RES doesn't, and why VIRT rise happens?

--
Sebastian Gniazdowski
psprint /at/ zdharma.org



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