At 2:56 PM +0000 2/15/02, Alex Gough wrote:
>On Thu, 14 Feb 2002, Dan Sugalski wrote:
>
>>  To allocate memory that is GCable, call Parrot_allocate(interpreter,
>>  size). Then stash the pointer and size in your buffer header, or
>>  it'll go missing later. To resize a chunk of memory, call
>>  mem_realloc(interpreter, from, oldsize, newsize).
>
>Having to pass in the oldsize makes it very tricky to use wrappers
>around around mem_realloc which work when code isn't in parrot, is it
>not possible to have the memory pools themselves be a bit more like
>malloc/realloc in tracking allocated sizes (I imagine they need to do
>this anyway, if GC is to free chunks appropriately)?

Non-parrot code shouldn't be dealing with parrot-local memory that's 
GCable without knowing about parrot data structures, including the 
buffer structure. Since we may well (and will, to start) have a 
copying collector, lack of knowledge will lead to nothing but pain as 
we yank memory around. :)

>  > If your buffer header can't be reached from the root set, you'll end
>>  up having it reclaimed when a sweep is made.
>
>Which bits of a PMC count as being reachable from the root set?

PMC registers, stack, PMC register stack, bookkeeping structures, and 
the global variable set. Everything should be reachable from there.
-- 
                                         Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                       teddy bears get drunk

Reply via email to