path: root/README
diff options
Diffstat (limited to 'README')
1 files changed, 55 insertions, 15 deletions
diff --git a/README b/README
index 5c572ce..80cb26a 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved.
-Copyright (c) 1996-1998 by Silicon Graphics. All rights reserved.
+Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved.
@@ -11,19 +11,19 @@ Permission to modify the code and to distribute modified code is granted,
provided the above notices are retained, and a notice that the code was
modified is included with the above copyright notice.
-This is version 4.14 of a conservative garbage collector for C and C++.
+This is version 5.0alpha3 of a conservative garbage collector for C and C++.
You might find a more recent version of this at
Early versions of this collector were developed as a part of research
projects supported in part by the National Science Foundation
and the Defense Advance Research Projects Agency.
-Much of the code was rewritten by Hans-J. Boehm at Xerox PARC
-and is now maintained by him at SGI (
+Much of the code was rewritten by Hans-J. Boehm ( at Xerox PARC
+and at SGI.
Some other contributors:
@@ -40,8 +40,8 @@ Robert Brazile ( originally supplied the ULTRIX code.
Al Dosser ( and Regis Cridlig (
subsequently provided updates and information on variation between ULTRIX
systems. Parag Patel ( supplied the A/UX code.
-Jesper Peterson( and
-Michel Schinz supplied the Amiga port.
+Jesper Peterson(, Michel Schinz, and
+Martin Tauchmann ( supplied the Amiga port.
Thomas Funke ( and
Brian D.Carlstrom ( supplied the NeXT ports.
Douglas Steel ( provided ICL DRS6000 code.
@@ -612,7 +612,7 @@ reclaimed. Exclusive-or'ing forward and backward links in a list
doesn't cut it.
Some C optimizers may lose the last undisguised pointer to a memory
object as a consequence of clever optimizations. This has almost
-never been observed in practice. Send mail to
+never been observed in practice. Send mail to
for suggestions on how to fix your compiler.
This is not a real-time collector. In the standard configuration,
percentage of time required for collection should be constant across
@@ -621,7 +621,7 @@ heap sizes. But collection pauses will increase for larger heaps.
per MB of accessible memory that needs to be scanned. Your mileage
may vary.) The incremental/generational collection facility helps,
but is portable only if "stubborn" allocation is used.
- Please address bug reports to If you are
+ Please address bug reports to If you are
contemplating a major addition, you might also send mail to ask whether
it's already been done (or whether we tried and discarded it).
@@ -1451,6 +1451,51 @@ Since 4.14alpha1
Since 4.14alpha2
- changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea).
+Since 4.14
+ - Reworked large block allocator. Now uses multiple doubly linked free
+ lists to approximate best fit.
+ - Changed heap expansion heuristic. Entirely free blocks are no longer
+ counted towards the heap size. This seems to have a major impact on
+ heap size stability; the old version could expand the heap way too
+ much in the presence of large block fragmentation.
+ - added -DGC_ASSERTIONS and some simple assertions inside the collector.
+ This is mainlyt for collector debugging.
+ - added -DUSE_MUNMAP to allow the heap to shrink. Suupported on only
+ a few UNIX-like platforms for now.
+ - added GC_dump_regions() for debugging of fragmentation issues.
+ - Changed PowerPC pointer alignment under Linux to 4. (This needs
+ checking by someone who has one. The suggestions came to me via a
+ rather circuitous path.)
+ - Changed the Linux/Alpha port to walk the data segment backwards until
+ it encounters a SIGSEGV. The old way to find the start of the data
+ segment broke with a recent release.
+ - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
+ GC_register_finalizer, so that it would continue to work with GC_DEBUG.
+ - allochblk sometimes cleared the wrong block for debugging purposes
+ when it dropped blacklisted blocks. This could result in spurious
+ error reports with GC_DEBUG.
+ - added MACOS X Server support. (Thanks to Andrew Stone.)
+ - Changed the Solaris threads code to ignore stack limits > 8 MB with
+ a warning. Empirically, it is not safe to access arbitrary pages
+ in such large stacks. And the dirty bit implementation does not
+ guarantee that none of them will be accessed.
+ - Integrated Martin Tauchmann's Amiga changes.
+ - Integrated James Dominy's OpenBSD/SPARC port.
+Since 5.0alpha1
+ - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
+ - Added -DKEEP_BACK_PTRS and backptr.h interface. (The implementation
+ idea came from Al Demers.)
+Since 5.0alpha2
+ - Added some highly incomplete code to support a copied young generation.
+ Comments on nursery.h are appreciated.
+ so the same effect could be obtained with a runtime switch. This is
+ a step towards standardizing on a single dynamic GC library.
+ - Significantly changed the way leak detection is handled, as a consequence
+ of the above.
To do:
- Very large root set sizes (> 16 MB or so) could cause the collector
@@ -1469,9 +1514,4 @@ To do:
blocks reside in the newly allocated heap section, the heuristic for
temporarily ignoring black-listing fails, and the heap grows too much.
(This was observed in only one case, and could be worked around, but ...)
- - I've started work on rewriting the large block allocator to use approximate
- best fit. There are rare cases in which the current allocator results in
- excessive large block fragmentation, even with the 4.13 fixes. This should
- also reduce large block allocation time, whcih has become occasionally
- noticable in 4.13.
+ - Some platform specific updates are waiting for 4.15alpha1.