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

Re: PATCH: Add g:: parameter expansion flag

On Fri, 13 May 2011 11:51:13 +0200
Mikael Magnusson <mikachu@xxxxxxxxx> wrote:
> >> So I am pretty sure I want to use META_HREALLOC, is that correct?
> > That would do, as it's what untok_and_escape() does, although
> > META_HEAPDUP would probably be OK at this point.  Reallocating
> > what's on the heap is a slightly strange thing to do, since the
> > point of the heap is to provide quick storage without the need to
> > micromanage it;
> In that case, isn't USEHEAP better? It'll allocate on the heap if
> there's anything to escape and otherwise do it in-place. Which is what
> I thought HREALLOC would do, but I guess that one would do more stuff
> to try and just grow. Won't it always succeed though, since the to-be
> reallocated value was just allocated on the line before? (At least
> when the heap isn't full).

USEHEAP is fine if you don't mind further modifications to the string
propagating back to the original.  In some places the string might not
be modifiable, or might refer to a permanently stored string, so you
wouldn't want to do that.  That may not be the case here; it needs
deciding case by case.

> > it
> > tends to be done when there's a long string on the heap that it
> > would be inefficient to keep duplicating, which isn't the case
> > here.  If the original heap chunk is surrounded by other
> > allocations it has to duplicate anyway, since the heap doesn't let
> > you reuse memory (until the whole heap is popped); you can't tell
> > just be looking at the call whether this will be the case.
> Why can't the string be long? Not that I think anyone would really
> notice anyway :).

The real problem is the combination of a long string that's continually
being extended, typically before any other heap allocation has been
done; that's the case hrealloc() is best at handling.

Peter Stephenson <pws@xxxxxxx>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK

Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom

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