
	      The Hoard Multiprocessor Memory Allocator
			<http://www.hoard.org>

			 Version Information
			 -------------------

version 3.9 (June 10, 2012):
        * Overhauled Heap Layers and cleaned up directory structure.
        * Fixed allocator to eliminate integer overflow (CVE-2012-2676).
          See also http://www.openwall.com/lists/oss-security/2012/06/07/13.

version 3.8.1:
	* Vastly improved Mac support: works for a wide range of applications
	without the need to declare "flat namespaces."

version 3.8 (Nov 9, 2009):
	* Refactored and fixed TLAB support to do appropriate cleanup.
        * Added interception of Solaris threads API (thr_*).
	* Moved createKey out of critical path, improving speed for Unix
          platforms that do not support __thread.
	* Added a lock to AlignedMmap to prevent a possible race condition.
	* Changed hooks to use GNU-supported hooks on platforms with glibc
          (especially Linux).
	* Changed all code to include C++ headers (e.g., <cassert>
          instead of <assert.h>).
	* Improved Mac support.
	* Added robustness, checking for heap corruption or other errors.
	* Improved Windows support (added _recalloc interception).
	* Fixed incorrect handling of a (highly unlikely) out-of-memory
          condition in bumpalloc.h.


version 3.7.1 (Feb. 20, 2008):
	* Fixed a serious bug for Windows in thread reclamation.
	* Fixed a small memory leak in thread creation.
	* Substantially increased performance for small objects on 64-bit platforms.
	* Initial port to Windows 64.

version 3.7 (Sept. 18, 2007):
	* Streamlined fast path for allocation, speeding 32 and 64-bit code.
	* Use pthread_* based thread-specific data for x86-64, where it's faster.

version 3.6.2 (May 25, 2007):
	* Fixed build for Mac OS X (Darwin).
	* Fixed to support older versions of Sun compilers.
	* Added FreeBSD ("freebsd") as a target.

version 3.6.1 (May 21, 2007):
	* Added x86-64 target for Linux/gcc.
	* Added support for posix_memalign (for Unix systems).
	* Added static library build option for Linux.

version 3.6 (May 10, 2007):
	* Improved performance, especially from thread-specific heap allocation.
	* Revised algorithm for large objects to reduce mmap fragmentation.
	* Added support for Solaris x86 (32 and 64 bit).
	* Fixed a problem for 64-bit builds.
	* Removed support for Detours.
	* Restored to top-level status (moved heaplayers to a directory).
	* Changed thread-specific data for Windows to support use in DLLs.
	* Build now fully supports Mac OS X (Darwin).

version 3.5.1 (May 22, 2006):
	* Eliminated a (rare) memory error.

version 3.5.0 (May 18, 2006):
	* Resolved some cross-platform memory leaks, notably
        for Windows due to surprising VirtualFree API
	(which doesn't reclaim memory unless size argument is 0).

version 3.4.0 (December 28, 2005):

        * Added support for X86-64, Apple OS-X,
	  and Microsoft's Visual Studio 2005.

	* Restored Detours version, but with thread-specific local heaps disabled.

	* Removed all dependencies on STL.

version 3.3.0 (May 27, 2005):

        * Added thread-specific local heaps, which substantially
	  improve performance by eliminating most atomic operations.

version 3.2.3:

	* Bug fix for Unix platforms, now allowing calls to
	  pthread_create with a NULL attribute.

	* Added support for ARM architectures.

version 3.2.2 (Dec 13, 2004):

	* Reduces memory consumption for large objects (Windows).

version 3.2.1 (Dec 3, 2004):

	* Maintenance release: fixes a bug for 64-bit versions
	  and changes the Windows build (for winhoard) slightly.

version 3.2 (Nov 28, 2004):

	* An improved Windows build (see NOTES.windows).
	* An algorithmic change (essentially a variant of thread-local
	  allocation buffers) that boosts performance by avoiding atomic
	  operations.

version 3.1 (Nov 14, 2004):

	* Several performance optimizations.
	* A minor bug fix for non-Windows platforms.

version 3 (Nov 21, 2003):

	* Switched over to Heap Layers-based implementation.
	* Added single-threaded optimization (if no threads spawned, no locks).

version 2.1.2 (April 7, 2003):

	* Made the code 64-bit clean.
	* Fixed a bug in recycling free memory on uniprocessors.

version 2.1.1:

	* Added Debian distribution support.
	* Fixed a Linux compilation bug in a benchmark.
        * Added automake-produced Makefiles for all benchmarks.
	* Added pthread_atfork handlers to avoid deadlocks when
	using fork().

version 2.1.0 (December 24, 2001):

	* Now ships as a DLL for Windows.
	* Reduced internal fragmentation for small objects.
	* A variety of performance improvements.
	* Patched to work on 64-bit Solaris.
	* Removed BeOS support.
	* Simplified user-level locking.
	* Incorporated Doug Lea's malloc as a faster backing store
	  than mmap(), for non-Windows execution.

version 2.0.6 (July 10, 2001):

	* Fix to allow Hoard to work with MFC under Windows.

version 2.0.5 (Mar 17, 2001):

	* Fix to work with the new Sun WorkShop compiler.

version 2.0.4 (Mar 14, 2001):

	* Fix to allow Hoard to work with Debug builds under Windows.

version 2.0.3 (Feb 17, 2001):

	* Added a fix for better fragmentation on uniprocessors,
	added a "winprojects" directory for easier building on Windows
	under Visual Studio, improved realloc performance, and fixed a bug
	for out-of-memory conditions.

version 2.0.2 (Apr 6, 2000):

	* Fixed a memory leak for SGI.

version 2.0.1:

	* Fixed compilation on AIX with xlC (IBM).

version 2.0 (Mar 24, 2000):

	* Added very aggressive superblock recycling. Now an empty
	superblock is immediately available for reuse for another size
	class. This can dramatically reduce fragmentation.

	* We now preferentially allocate from recently-touched
	superblocks to improve page locality.

	* Incorporated a protocol to guarantee swift superblock
	'acquisition' by free().

version 1.5.3: (not generally released)

	* Miscellaneous bug fixes.

version 1.5.2 (Feb 24, 2000):

	* Fixed a problem on some Linux systems that caused
	many large allocations to fail.
	* Fixed a call to VirtualFree which didn't actually
	release memory back to the system.


version 1.5.1 (Feb 21, 2000):

	* Changed initialization of the process heap to fix
	a problem with Visual C++.

version 1.5 (Feb 18, 2000):

	* Large blocks (> 4K) are now immediately returned to
	the system when they are freed.

	* Made a number of improvements to the algorithm that ensure
        O(1) cost for malloc & free and guarantee low contention for
	free's. (These will be discussed in a paper currently in
	progress.) Also added a method that further reduces the number
	of system calls when allocating memory.

	* Added superblock recycling to reduce fragmentation.

	* Hoard now compiles with Sun's Workshop compilers (version 5.0)
	on SPARCs. (Thanks to Ganesan Rajagopal of Novell for the
	undocumented .il trick for inlining assembly.)

	* Ported to AIX (IBM, PowerPC-based).

version 1.4.2 (Jan 16, 2000):

	* A bug fix -- corrects a subtle problem with memalign.
	Hoard now successfully passes Wolfram Gloger's
	malloc-test (included with the distribution).

version 1.4.1 (Jan 12, 2000):

	* A few fixes for backward compatibility with Solaris 2.6.

version 1.4 (Jan 11, 2000):

	* Doubled the speed of calls to free().
	* Further improved scalability, especially on Solaris.
	* Reduced memory consumption and improved performance on
	uniprocessors.
	* Changed the lock implementation for Windows from spin to
	spin-yield, as in the UNIX implementations (thanks to Paul
	Larson of Microsoft Research for pointing out how to do this).
	* Removed the shbench benchmark from the distribution, per
	request from MicroQuill, Inc.

version 1.3.3:

	* Changed some casts of pointers to unsigned longs
	to allow Hoard to work on 64-bit machines (read: SGI O2K).

version 1.3.2 (Nov 23, 1999):

	* Minor modifications for the Windows NT port,
	along with workspace and project files for Visual C++
	(thanks to Arnd Bohm).

version 1.3.1:

	* Included a customized version of 'atexit' for Linux,
	since the newest version of libc (2.1.2) caused Hoard to
	deadlock (it called malloc internally).

version 1.3 (Nov 18, 1999):

	* Ported to the BeOS (thanks to Trey Boudreau of Be).
	* Replaced the per-sizeclass locks with per-heap locks,
	since this has no impact on scalability and reduces Hoard's
	static footprint.

version 1.2 (Oct 29, 1999):

	* Dramatically improved performance with fast user-level locks
 	for SPARC, x86, and the SGI.
	* Added sproc support (for the SGI).
	* Hoard can now be built under Visual C++ (thanks to John
	Hickin).

version 1.1 (Oct 13, 1999):

	* Added autoconf and automake scripts to facilitate compilation
	and installation (including shared libraries).
	(thanks to Ganesan Rajagopal of Novell for submitting the scripts)

version 1.0.3 (Oct 4, 1999):

	* Hoard now scales on OS's besides Linux and Solaris.
	(the thread ID hash function was pathological for other OS's)

version 1.0.2 (Oct 4, 1999):

	* Ported to Windows NT.
	* Added in the benchmark suite (larson, linux-scalability, shbench).

version 1.0.1 (Sep 30, 1999):

	* Fixed a build problem.

version 1.0 (Sep 29, 1999):

	* Initial release.

