[EMAIL PROTECTED] wrote:

Could we have the chunks only hold one frame and avoid much of the
compaction work?  If we return to the inderict access mechanism, we
can switch register frames by changing one pointer.  But if we keep
the one frame per chunk, we do not need to compact frames, standard
DOD/GC will be able to reclaim frames.  I recall there being
efficiency issues with frames being frequently allocated/deallocated
too frequently, so we could have a special free list for frames.

This proposal feels to me like a slightly simpler version of yours. Thus I would argue for it on the grounds of do the simple thing first
and compare its efficiency.


Well, for the code that doesn't do call/cc, bigger chunks mean that that you can use them as a classical stack. So you won't ever have to allocate them, and never have to run the compaction. For call/cc, you still don't have to compact them as often, since the non-captured continuations will get popped normally, and the watermark lowering will take care of temporarily captured continuations (between two GC's).

Basically bigger chunks mean that frames are allocated using the special scheme just for them. Considering that you're going to allocate one on each function call, I would agree with LT that the complexity is justified (and is not too bad - the way I understand the Parrot internals, which is to say, not too well ;), arrays of PMC pointers already get copy-collected; stack frame chunks are not too different from these).

  Miro





Reply via email to