On Wed, Oct 02, 2002 at 02:01:48PM +0200, Leopold Toetsch wrote: > As already posted I incorparated the allocator from > http://gee.cs.oswego.edu/dl/html/malloc.html > in parrot. > > Some remarks: > - it's totally stable now, runs all tests (parrot and perl6) > - memory consumption is like CVS or much less ... > - ... if resources.c is unpatched (#17702) > - runs almost[1] everything in almost the same time
> And last but not least, LEA allocator doesn't invalidate pointers due to > copying data around (except realloc of course) - so e.g. hash.c or > others could be optimized. > > Please have a closer look at it. > void > add_free_buffer(struct Parrot_Interp *interpreter, > - struct Small_Object_Pool *pool, void *buffer) > + struct Small_Object_Pool *pool, void *buff) > { > - ((Buffer *)buffer)->flags = BUFFER_on_free_list_FLAG; > + Buffer * buffer = buff; > + if (buffer->bufstart && !(buffer->flags & > + (BUFFER_COW_FLAG|BUFFER_external_FLAG))) { > + free(buffer->bufstart); > + } > + buffer->bufstart = 0; > + buffer->flags = BUFFER_on_free_list_FLAG; > /* Use the right length */ > - ((Buffer *)buffer)->buflen = 0; > + buffer->buflen = 0; The article doesn't mention garbage collection at all, and neither your remarks nor your patch explains how it is now done. Is all garbage being collected via that one free(buffer->bufstart); in the patch above? I'm confused, and would appreciate hints about how to become less confused. Nicholas Clark