Skip to content
  • Damien George's avatar
    py, gc: Zero out newly allocated blocks in the GC. · daab651c
    Damien George authored
    Also add some more debugging output to gc_dump_alloc_table().
    
    Now that newly allocated heap is always zero'd, maybe we just make this
    a policy for the uPy API to keep it simple (ie any new implementation of
    memory allocation must zero all allocations).  This follows the D
    language philosophy.
    
    Before this patch, a previously used memory block which had pointers in
    it may still retain those pointers if the new user of that block does
    not actually use the entire block.  Eg, if I want 5 blocks worth of
    heap, I actually get 8 (round up to nearest 4).  Then I never use the
    last 3, so they keep their old values, which may be pointers pointing to
    the heap, hence preventing GC.
    
    In rare (or maybe not that rare) cases, this leads to long, unintentional
    "linked lists" within the GC'd heap, filling it up completely.  It's
    pretty rare, because you have to reuse exactly that memory which is part
    of this "linked list", and reuse it in just the right way.
    
    This should fix issue #522, and might have something to do with
    issue #510.
    daab651c