hans.boehm at hp.com
Tue Nov 9 12:30:42 PST 2004
I put gc7.0alpha1.tar.gz on the web site.
This release is only for people working on additions to the GC,
etc. This release is BROKEN ON MOST PLATFORMS. It superficially
appears to work on Linux/X86 and Linux/IA64. It ran not too long
ago on Cygwin. It probably works on nothing else. It currently
builds only with the old "make test" (Makefile.direct) approach.
To make this clear, it resides in
I'd prefer major future patches against this version. I am still
planning on releasing at least 6.4, but it will be limited to minor
fixes and easy new ports.
I expect that 7.0alpha1 is a better starting point than 6.3 for LLP64
ports, in spite of its rough shape. That is part of the reason I'm
making it available now.
The more interesting changes in 7.0alpha1 include:
- Prototypes everywhere (I hope). K&R C is unsupported. Most of
the "register" declarations are gone. (The rest will disappear
as I run into them.)
- It uses the atomic_ops package to access atomic operations and
barriers. I've included version 1.6 of the package. It needs
more work for support of additional architectures. As always,
patches are welcome. (The GNU configury needs to either be
taught to also build atomic_ops, or to look for it elsewhere.
That's why it's currently broken.)
- A revised mark algorithm. I think it's a bit cleaner. It
requires a bit less space overhead for small heaps. And I think
it's a bit faster in most cases.
- It keeps track of the amount of reachable memory in the normal
default configuration. This allows a more robust expansion heuristic.
- In multithreaded mode, it only acquires a lock if a second thread
was started. This should make it much more reasonable to always use
the multithreaded configuration. It should also make it much more
robust as a malloc replacement in a multithreaded config, though I
haven't pursued that yet.
- It now uses mark bytes by default. It turns out that this is a large
time win on Pentium 4s with parallel marking. It unfortunately costs
- Size parameters to various routines are now expressed in bytes
(usually), allocation granules (where appropriate), and very
occasionally words (were word at a time access is required), instead
of the somewhat haphazard mix of bytes and words that was there before.
Free lists are indexed by granules.
- Stubborn allocation is gone. I have a plan to replace it, but it's
not actually there yet.
- The same holds for Solaris threads support. The intent is to use
pthread_support.c. The old approach was a maintenance issue, and it
didn't support parallel marking, which I think will shortly become
critical on almost all platforms.
More information about the Gc