⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.changes

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CHANGES
📖 第 1 页 / 共 5 页
字号:
This is a rough history of garbage collector bugs and versions.This has been maintained with varying diligence over the years.I made an attempt to include recent contributors here.  I apologize for anyomissions.RECENT UPDATES ARE RECORDED IN ../ChangeLog FILE INSTEAD TO CONFORM TOMORE COMMON CONVENTIONS.-------------------------  Version 1.3 and immediately preceding versions contained spuriousassembly language assignments to TMP_SP.  Only the assignment in the PC/RTcode is necessary.  On other machines, with certain compiler options,the assignments can lead to an unsaved register being overwritten.Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With-O the compiler recognizes it as dead code.  It probably shouldn't,but that's another story.)  Version 1.4 and earlier versions used compile time determined valuesfor the stack base.  This no longer works on Sun 3s, since Sun 3/80s usea different stack base.  We now use a straightforward heuristic on allmachines on which it is known to work (incl. Sun 3s) and compile-timedetermined values for the rest.  There should really be library callsto determine such values.  Version 1.5 and earlier did not ensure 8 byte alignment for objectsallocated on a sparc based machine.  Version 1.8 added ULTRIX support in gc_private.h.    Version 1.9 fixed a major bug in gc_realloc.    Version 2.0 introduced a consistent naming convention for collectorroutines and added support for registering dynamic library data segmentsin the standard mark_roots.c.  Most of the data structures were revamped.The treatment of interior pointers was completely changed.  Finalizationwas added.  Support for locking was added.  Object kinds were added.We added a black listing facility to avoid allocating at addresses knownto occur as integers somewhere in the address space.  Much of thiswas accomplished by adapting ideas and code from the PCR collector.The test program was changed and expanded.  Version 2.1 was the first stable version since 1.9, and added supportfor PPCR.  Version 2.2 added debugging allocation, and fixed various bugs.  Among them:- GC_realloc could fail to extend the size of the object for certain large object sizes.- A blatant subscript range error in GC_printf, which unfortunately  wasn't exercised on machines with sufficient stack alignment constraints.- GC_register_displacement did the wrong thing if it was called after  any allocation had taken place.- The leak finding code would eventually break after 2048 byte  byte objects leaked.- interface.c didn't compile.- The heap size remained much too small for large stacks.- The stack clearing code behaved badly for large stacks, and perhaps  on HP/PA machines.  Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs:- Missing declaration of etext in the A/UX version.- Some PCR root-finding problems.- Blacklisting was not 100% effective, because the plausible future  heap bounds were being miscalculated.- GC_realloc didn't handle out-of-memory correctly.- GC_base could return a nonzero value for addresses inside free blocks.- test.c wasn't really thread safe, and could erroneously report failure  in a multithreaded environment.  (The locking primitives need to be  replaced for other threads packages.)- GC_CONS was thoroughly broken.- On a SPARC with dynamic linking, signals stayed diabled while the  client code was running.  (Thanks to Manuel Serrano at INRIA for reporting the last two.)    Version 2.4 added GC_free_space_divisor as a tuning knob, added  support for OS/2 and linux, and fixed the following bugs:- On machines with unaligned pointers (e.g. Sun 3), every 128th word could  fail to be considered for marking.- Dynamic_load.c erroneously added 4 bytes to the length of the data and  bss sections of the dynamic library.  This could result in a bad memory  reference if the actual length was a multiple of a page.  (Observed on  Sun 3.  Can probably also happen on a Sun 4.)  (Thanks to Robert Brazile for pointing out that the Sun 3 version  was broken.  Dynamic library handling is still broken on Sun 3s  under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine,  use -Bstatic.)    Version 2.5 fixed the following bugs:- Removed an explicit call to exit(1)- Fixed calls to GC_printf and GC_err_printf, so the correct number of  arguments are always supplied.  The OS/2 C compiler gets confused if  the number of actuals and the number of formals differ.  (ANSI C  doesn't require this to work.  The ANSI sanctioned way of doing things  causes too many compatibility problems.)    Version 3.0  added generational/incremental collection and stubborn  objects.  Version 3.1 added the following features:- A workaround for a SunOS 4.X SPARC C compiler  misfeature that caused problems when the collector was turned into  a dynamic library.  - A fix for a bug in GC_base that could result in a memory fault.- A fix for a performance bug (and several other misfeatures) pointed  out by Dave Detlefs and Al Dosser.- Use of dirty bit information for static data under Solaris 2.X.- DEC Alpha/OSF1 support (thanks to Al Dosser).- Incremental collection on more platforms.- A more refined heap expansion policy.  Less space usage by default.- Various minor enhancements to reduce space usage, and to reduce  the amount of memory scanned by the collector.- Uncollectable allocation without per object overhead.- More conscientious handling of out-of-memory conditions.- Fixed a bug in debugging stubborn allocation.- Fixed a bug that resulted in occasional erroneous reporting of smashed  objects with debugging allocation.- Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.  Version 3.2 fixed a serious and not entirely repeatable bug in  the incremental collector.  It appeared only when dirty bit info  on the roots was available, which is normally only under Solaris.  It also added GC_general_register_disappearing_link, and some  testing code.  Interface.c disappeared.  Version 3.3 fixes several bugs and adds new ports:- PCR-specific bugs.- Missing locking in GC_free, redundant FASTUNLOCK  in GC_malloc_stubborn, and 2 bugs in  GC_unregister_disappearing_link.  All of the above were pointed out by Neil Sharman  (neil@cs.mu.oz.au).- Common symbols allocated by the SunOS4.X dynamic loader  were not included in the root set.- Bug in GC_finalize (reported by Brian Beuning and Al Dosser)- Merged Amiga port from Jesper Peterson (untested)- Merged NeXT port from Thomas Funke (significantly  modified and untested)  Version 3.4:- Fixed a performance bug in GC_realloc.- Updated the amiga port.- Added NetBSD and 386BSD ports.- Added cord library.- Added trivial performance enhancement for  ALL_INTERIOR_POINTERS.  (Don't scan last word.)    Version 3.5- Minor collections now mark from roots only once, if that  doesn't cause an excessive pause.- The stack clearing heuristic was refined to prevent anomalies  with very heavily recursive programs and sparse stacks.- Fixed a bug that prevented mark stack growth in some cases.  GC_objects_are_marked should be set to TRUE after a call  to GC_push_roots and as part of GC_push_marked, since  both can now set mark bits.  I think this is only a performance  bug, but I wouldn't bet on it.  It's certainly very hard to argue  that the old version was correct.- Fixed an incremental collection bug that prevented it from  working at all when HBLKSIZE != getpagesize()- Changed dynamic_loading.c to include gc_priv.h before testing  DYNAMIC_LOADING.  SunOS dynamic library scanning  must have been broken in 3.4.- Object size rounding now adapts to program behavior.- Added a workaround (provided by Manuel Serrano and  colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug  that I had incorrectly assumed to have been squished.  The collector was broken if the text segment size was within  32 bytes of a multiple of 8K bytes, and if the beginning of  the data segment contained interesting roots.  The workaround  assumes a demand-loadable executable.  The original may have  have "worked" in some other cases.- Added dynamic library support under IRIX5.- Added support for EMX under OS/2 (thanks to Ari Huttunen).  Version 3.6:- fixed a bug in the mark stack growth code that was introduced  in 3.4.- fixed Makefile to work around DEC AXP compiler tail recursion  bug.Version 3.7:- Added a workaround for an HP/UX compiler bug.- Fixed another stack clearing performance bug.  Reworked  that code once more.  Version 4.0:- Added support for Solaris threads (which was possible  only by reimplementing some fraction of Solaris threads,  since Sun doesn't currently make the thread debugging  interface available).- Added non-threads win32 and win32S support.- (Grudgingly, with suitable muttering of obscenities) renamed  files so that the collector distribution could live on a FAT  file system.  Files that are guaranteed to be useless on  a PC still have long names.  Gc_inline.h and gc_private.h  still exist, but now just include  gc_inl.h and gc_priv.h.- Fixed a really obscure bug in finalization that could cause  undetected mark stack overflows.  (I would be surprised if  any real code ever tickled this one.)- Changed finalization code to dynamically resize the hash  tables it maintains.  (This probably does not matter for well-  -written code.  It no doubt does for C++ code that overuses  destructors.)- Added typed allocation primitives.  Rewrote the marker to  accommodate them with more reasonable efficiency.  This  change should also speed up marking for GC_malloc allocated  objects a little.  See gc_typed.h for new primitives.- Improved debugging facilities slightly.  Allocation time  stack traces are now kept by default on SPARC/SUNOS4.  (Thanks to Scott Schwartz.)- Added better support for small heap applications.- Significantly extended cord package.  Fixed a bug in the  implementation of lazily read files.  Printf and friends now  have cord variants.  Cord traversals are a bit faster.- Made ALL_INTERIOR_POINTERS recognition the default.- Fixed de so that it can run in constant space, independent  of file size.  Added simple string searching to cords and de.- Added the Hull-Ellis C++ interface.- Added dynamic library support for OSF/1.  (Thanks to Al Dosser and Tim Bingham at DEC.)- Changed argument to GC_expand_hp to be expressed  in units of bytes instead of heap blocks.  (Necessary  since the heap block size now varies depending on  configuration.  The old version was never very clean.)- Added GC_get_heap_size().  The previous "equivalent"  was broken.- Restructured the Makefile a bit.  Since version 4.0:- Changed finalization implementation to guarantee that  finalization procedures are called outside of the allocation  lock, making direct use of the interface a little less dangerous.  MAY BREAK EXISTING CLIENTS that assume finalizers  are protected by a lock.  Since there seem to be few multithreaded  clients that use finalization, this is hopefully not much of  a problem.- Fixed a gross bug in CORD_prev.- Fixed a bug in blacklst.c that could result in unbounded  heap growth during startup on machines that do not clear  memory obtained from the OS (e.g. win32S).- Ported de editor to win32/win32S.  (This is now the only  version with a mouse-sensitive UI.)- Added GC_malloc_ignore_off_page to allocate large arrays  in the presence of ALL_INTERIOR_POINTERS.- Changed GC_call_with_alloc_lock to not disable signals in  the single-threaded case.- Reduced retry count in GC_collect_or_expand for garbage  collecting when out of memory.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -