Annotation of OpenXM_contrib2/asir2000/gc/doc/gcinterface.html, Revision 1.1
1.1 ! noro 1: <!DOCTYPE HTML>
! 2: <HEAD>
! 3: <TITLE>Garbage Collector Interface</TITLE>
! 4: </HEAD>
! 5: <BODY>
! 6: <H1>C Interface</h1>
! 7: On many platforms, a single-threaded garbage collector library can be built
! 8: to act as a plug-in malloc replacement. (Build with -DREDIRECT_MALLOC=GC_malloc
! 9: -DIGNORE_FREE.) This is often the best way to deal with third-party libraries
! 10: which leak or prematurely free objects. -DREDIRECT_MALLOC is intended
! 11: primarily as an easy way to adapt old code, not for new development.
! 12: <P>
! 13: New code should use the interface discussed below.
! 14: <P>
! 15: Code must be linked against the GC library. On most UNIX platforms,
! 16: this will be gc.a.
! 17: <P>
! 18: The following describes the standard C interface to the garbage collector.
! 19: It is not a complete definition of the interface. It describes only the
! 20: most commonly used functionality, approximately in decreasing order of
! 21: frequency of use. The description assumes an ANSI C compiler.
! 22: The full interface is described in
! 23: <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>
! 24: or <TT>gc.h</tt> in the distribution.
! 25: <P>
! 26: Clients should include gc.h.
! 27: <P>
! 28: In the case of multithreaded code,
! 29: gc.h should be included after the threads header file, and
! 30: after defining the appropriate GC_XXXX_THREADS macro.
! 31: (For 6.2alpha4 and later, simply defining GC_THREADS should suffice.)
! 32: Gc.h must be included
! 33: in files that use either GC or threads primitives, since threads primitives
! 34: will be redefined to cooperate with the GC on many platforms.
! 35: <DL>
! 36: <DT> <B>void * GC_MALLOC(size_t <I>nbytes</i>)</b>
! 37: <DD>
! 38: Allocates and clears <I>nbytes</i> of storage.
! 39: Requires (amortized) time proportional to <I>nbytes</i>.
! 40: The resulting object will be automatically deallocated when unreferenced.
! 41: References from objects allocated with the system malloc are usually not
! 42: considered by the collector. (See GC_MALLOC_UNCOLLECTABLE, however.)
! 43: GC_MALLOC is a macro which invokes GC_malloc by default or, if GC_DEBUG
! 44: is defined before gc.h is included, a debugging version that checks
! 45: occasionally for overwrite errors, and the like.
! 46: <DT> <B>void * GC_MALLOC_ATOMIC(size_t <I>nbytes</i>)</b>
! 47: <DD>
! 48: Allocates <I>nbytes</i> of storage.
! 49: Requires (amortized) time proportional to <I>nbytes</i>.
! 50: The resulting object will be automatically deallocated when unreferenced.
! 51: The client promises that the resulting object will never contain any pointers.
! 52: The memory is not cleared.
! 53: This is the preferred way to allocate strings, floating point arrays,
! 54: bitmaps, etc.
! 55: More precise information about pointer locations can be communicated to the
! 56: collector using the interface in
! 57: <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_typedh.txt">gc_typed.h</a> in the distribution.
! 58: <DT> <B>void * GC_MALLOC_UNCOLLECTABLE(size_t <I>nbytes</i>)</b>
! 59: <DD>
! 60: Identical to GC_MALLOC, except that the resulting object is not automatically
! 61: deallocated. Unlike the system-provided malloc, the collector does
! 62: scan the object for pointers to garbage-collectable memory, even if the
! 63: block itself does not appear to be reachable. (Objects allocated in this way
! 64: are effectively treated as roots by the collector.)
! 65: <DT> <B> void * GC_REALLOC(void *old, size_t new_size) </b>
! 66: <DD>
! 67: Allocate a new object of the indicated size and copy (a prefix of) the
! 68: old object into the new object. The old object is reused in place if
! 69: convenient. If the original object was allocated with GC_malloc_atomic,
! 70: the new object is subject to the same constraints. If it was allocated
! 71: as an uncollectable object, then the new object is uncollectable, and
! 72: the old object (if different) is deallocated.
! 73: (Use GC_REALLOC with GC_MALLOC, etc.)
! 74: <DT> <B> void GC_FREE(void *dead) </b>
! 75: <DD>
! 76: Explicitly deallocate an object. Typically not useful for small
! 77: collectable objects. (Use GC_FREE with GC_MALLOC, etc.)
! 78: <DT> <B> void * GC_MALLOC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
! 79: <DD>
! 80: <DT> <B> void * GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(size_t <I>nbytes</i>) </b>
! 81: <DD>
! 82: Analogous to GC_MALLOC and GC_MALLOC_ATOMIC, except that the client
! 83: guarantees that as long
! 84: as the resulting object is of use, a pointer is maintained to someplace
! 85: inside the first 512 bytes of the object. This pointer should be declared
! 86: volatile to avoid interference from compiler optimizations.
! 87: (Other nonvolatile pointers to the object may exist as well.)
! 88: This is the
! 89: preferred way to allocate objects that are likely to be > 100KBytes in size.
! 90: It greatly reduces the risk that such objects will be accidentally retained
! 91: when they are no longer needed. Thus space usage may be significantly reduced.
! 92: <DT> <B> void GC_gcollect(void) </b>
! 93: <DD>
! 94: Explicitly force a garbage collection.
! 95: <DT> <B> void GC_enable_incremental(void) </b>
! 96: <DD>
! 97: Cause the garbage collector to perform a small amount of work
! 98: every few invocations of GC_malloc or the like, instead of performing
! 99: an entire collection at once. This is likely to increase total
! 100: running time. It will improve response on a platform that either has
! 101: suitable support in the garbage collector (Irix and most other Unix
! 102: versions, win32 if the collector was suitably built) or if "stubborn"
! 103: allocation is used (see <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a>).
! 104: On many platforms this interacts poorly with system calls
! 105: that write to the garbage collected heap.
! 106: <DT> <B> GC_warn_proc GC_set_warn_proc(GC_warn_proc p) </b>
! 107: <DD>
! 108: Replace the default procedure used by the collector to print warnings.
! 109: The collector
! 110: may otherwise write to sterr, most commonly because GC_malloc was used
! 111: in a situation in which GC_malloc_ignore_off_page would have been more
! 112: appropriate. See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details.
! 113: <DT> <B> void GC_register_finalizer(...) </b>
! 114: <DD>
! 115: Register a function to be called when an object becomes inaccessible.
! 116: This is often useful as a backup method for releasing system resources
! 117: (<I>e.g.</i> closing files) when the object referencing them becomes
! 118: inaccessible.
! 119: It is not an acceptable method to perform actions that must be performed
! 120: in a timely fashion.
! 121: See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> for details of the interface.
! 122: See <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/finalization.html">here</a> for a more detailed discussion
! 123: of the design.
! 124: <P>
! 125: Note that an object may become inaccessible before client code is done
! 126: operating on its fields. Suitable synchronization is usually required.
! 127: See <A HREF="http://portal.acm.org/citation.cfm?doid=604131.604153">here</a>
! 128: or <A HREF="http://www.hpl.hp.com/techreports/2002/HPL-2002-335.html">here</a>
! 129: for details.
! 130: </dl>
! 131: <P>
! 132: If you are concerned with multiprocessor performance and scalability,
! 133: you should consider enabling and using thread local allocation (<I>e.g.</i>
! 134: GC_LOCAL_MALLOC, see <TT>gc_local_alloc.h</tt>. If your platform
! 135: supports it, you should build the collector with parallel marking support
! 136: (-DPARALLEL_MARK, or --enable-parallel-mark).
! 137: <P>
! 138: If the collector is used in an environment in which pointer location
! 139: information for heap objects is easily available, this can be passed on
! 140: to the colllector using the interfaces in either <TT>gc_typed.h</tt>
! 141: or <TT>gc_gcj.h</tt>.
! 142: <P>
! 143: The collector distribution also includes a <B>string package</b> that takes
! 144: advantage of the collector. For details see
! 145: <A HREF="http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/cordh.txt">cord.h</a>
! 146:
! 147: <H1>C++ Interface</h1>
! 148: There are three distinct ways to use the collector from C++:
! 149: <DL>
! 150: <DT> <B> STL allocators </b>
! 151: <DD>
! 152: Users of the <A HREF="http://www.sgi.com/tech/stl">SGI extended STL</a>
! 153: can include <TT>new_gc_alloc.h</tt> before including
! 154: STL header files.
! 155: (<TT>gc_alloc.h</tt> corresponds to now obsolete versions of the
! 156: SGI STL.)
! 157: This defines SGI-style allocators
! 158: <UL>
! 159: <LI> alloc
! 160: <LI> single_client_alloc
! 161: <LI> gc_alloc
! 162: <LI> single_client_gc_alloc
! 163: </ul>
! 164: which may be used either directly to allocate memory or to instantiate
! 165: container templates. The first two allocate uncollectable but traced
! 166: memory, while the second two allocate collectable memory.
! 167: The single_client versions are not safe for concurrent access by
! 168: multiple threads, but are faster.
! 169: <P>
! 170: For an example, click <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_alloc_exC.txt">here</a>.
! 171: <P>
! 172: Recent versions of the collector also include a more standard-conforming
! 173: allocator implemention in <TT>gc_allocator.h</tt>. It defines
! 174: <UL>
! 175: <LI> traceable_allocator
! 176: <LI> gc_allocator
! 177: </ul>
! 178: Again the former allocates uncollectable but traced memory.
! 179: This should work with any fully standard-conforming C++ compiler.
! 180: <DT> <B> Class inheritance based interface </b>
! 181: <DD>
! 182: Users may include gc_cpp.h and then cause members of certain classes to
! 183: be allocated in garbage collectable memory by inheriting from class gc.
! 184: For details see <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc_cpph.txt">gc_cpp.h</a>.
! 185: <DT> <B> C interface </b>
! 186: <DD>
! 187: It is also possible to use the C interface from
! 188: <A HREF="http://hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gch.txt">gc.h</a> directly.
! 189: On platforms which use malloc to implement ::new, it should usually be possible
! 190: to use a version of the collector that has been compiled as a malloc
! 191: replacement. It is also possible to replace ::new and other allocation
! 192: functions suitably.
! 193: <P>
! 194: Note that user-implemented small-block allocation often works poorly with
! 195: an underlying garbage-collected large block allocator, since the collector
! 196: has to view all objects accessible from the user's free list as reachable.
! 197: This is likely to cause problems if GC_malloc is used with something like
! 198: the original HP version of STL.
! 199: This approach works with the SGI versions of the STL only if the
! 200: <TT>malloc_alloc</tt> allocator is used.
! 201: </dl>
! 202: </body>
! 203: </html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>