Changes between Version 2 and Version 3 of GCSweepFreeImplementation

05/12/10 01:37:19 (4 years ago)

Added implementation tasks. I think this is everything, but there's probably more necessary detail.


  • GCSweepFreeImplementation

    v2 v3  
    3030We may be able to find smaller and cheaper data structures than the doubly linked list, though the cheapness of splicing elements and lists together is compelling. 
     34  * Create branch 
     35  * Copy mark/sweep implementation into a new file (gc_sf.c, perhaps) 
     36  * Change function names, especially in GC struct, in the new file 
     37  * Add the pointers for the new lists to the SF GC struct 
     38  * Change arena allocation to allocate space for each list in each new arena (because a GCable can only be on one list at a time, we need two pointers worth of data for each GCable -- allocating this in one chunk at the start of the arena makes them relatively contiguous in memory, so it should fit in the cache much better).  Let's call this a GC_LL struct. 
     39  * Add a function to calculate the correct GC_LL struct for any given GCable, given a pointer to the GCable (this isn't trivial, but it can be cheap) 
     40  * Change the get_free_header function in gc_sf.c to put the freshly-allocated header on the MAYBE list 
     41  * Change the mark functions to splice a given GCable out of its current list and into the LIVE list 
     42  * Change the beginning of mark function in gc_sf.c to point to a new MAYBE list 
     43  * Change the end of mark function in gc_sf.c to append the MAYBE list to the FREE list (or prepend?) 
     44  * Change the "get a new free header" function to perform any active destruction (though for an optimization, if a PMC header already has sufficient PMC_data space allocated, it's unnecessary to free it) 
     45  * Add a configuration option to enable the new sweep-free GC 
     46  * Fix bugs