hans.boehm at hp.com
Mon Jul 2 16:23:44 PDT 2007
I finally made gc version 7.0 available as
(Note the hyphen; the naming convention changed slightly.)
The CVS tree is now labelled as 7.1alpha1.
I tested this on some of the most common platforms (various Linux,
Windows versions, Solaris, HP/UX, MacOS X). I did not get a chance to
test on AIX or Irix.
There has been a report that this does not build on MacOS 10.3.9, but it
seems to work on most other MacOS X versions.
The Cygwin port does not support dynamic libraries. (Neither did 6.8,
but the documentation is now more clear about that. I suspect this
actually isn't hard to fix.)
Changes relative to 6.8 include, in no particular order:
- Change C code to require at least C89. Clean up code in various
- Win64 port.
- Always count how much live data there is in the heap. Add more
robust heap expansion heuristic which relies on this.
- Remove old-style Solaris threads support and some other obsolete
- Restructure mark code, hopefull resulting in some performance
- Change the GC code to traffic mostly in either bytes or allocation
granules, not words, internally.
- Provide for fast inline allocation that requires less frequent client
recompilations. (Needs more testing.)
- Removed SILENT configuration macro and PRINTSTATS and GATHERSTATS
macros. Control is now via GC_PRINT_STATS and GC_PRINT_VERBOSE_STATS
- Thread local allocation is now performed without needing to call
special allocation functions. The configuration macro
continues to determine whether this is supported.
- Thread local allocation is supported on more platforms.
- Win32 threads code was rewritten and is hopefully more sane.
- Allocation routines now decide whether to lock dynamically, based on
whether a second thread has been created.
- Mostly untested support for a compiler write barrier.
- Use libatomic_ops for atomic operations.
- Limited support for malloc redirection with Linux threads (& NPTL ).
- Various bug fixes and some new platform support.
More information about the Gc