Great work. > * a garbage colletor which can be enabled with '-fjgc' is available. > after some more testing, I will make it the default in the 0.7.5 release. > * A new memory allocator based on Jeff Bonwick's slab memory allocator for > kernels. This means that in many cases, memory can be pulled off a slab > and immediately used with no initialization, in addition, it allowed a > rearrangement of the GC meta-data to optimizally use the cache.
That sounds like you're essentially using BIBOP (big bag of pages, http://www.memorymanagement.org/glossary/b.html#bibop). Did you compare the overheads with the header-based scheme? Do you still need a tag/header word or do you get the tag by looking up the per page info? Do you use this scheme for all objects or only for small objects? I could imagine a hybrid scheme where where you use bibop for, say, single-constructor objects, although I wonder how you would deal with thunks and their update. > * packed representation of algebraic types, 'Maybe Foo' is actually > represented in memory as a NULL pointer or just a 'Foo' with no tag bits. > Combined with the slab allocator, this can double the number of some common > values that can be put in a cache line. Interesting. How do you distinguish 'Just e' from 'Just _|_'? Do you need the whole program assumption to disprove that the latter case can happen? / Thomas _______________________________________________ Haskell mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell
