The Hoard Multiprocessor Memory Allocator Version Information ------------------- version 3.7.1: * Fixed a serious bug for Windows in thread reclamation. * Fixed a small memory leak in thread creation. * Initial port to Windows 64. version 3.7: * 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: * 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: * 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: * 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: * Eliminated a (rare) memory error. version 3.5.0: * 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: * 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: * 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: * Reduces memory consumption for large objects (Windows). version 3.2.1: * Maintenance release: fixes a bug for 64-bit versions and changes the Windows build (for winhoard) slightly. version 3.2: * 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: * Several performance optimizations. * A minor bug fix for non-Windows platforms. version 3: * Switched over to Heap Layers-based implementation. * Added single-threaded optimization (if no threads spawned, no locks). version 2.1.2: * 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: * 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: * Fix to allow Hoard to work with MFC under Windows. version 2.0.5: * Fix to work with the new Sun WorkShop compiler. version 2.0.4: * Fix to allow Hoard to work with Debug builds under Windows. version 2.0.3: * 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: * Fixed a memory leak for SGI. version 2.0.1: * Fixed compilation on AIX with xlC (IBM). version 2.0: * 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: * 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: * Changed initialization of the process heap to fix a problem with Visual C++. version 1.5: * 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: * 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: * A few fixes for backward compatibility with Solaris 2.6. version 1.4: * 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: * 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: * 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: * 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: * 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: * 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: * Ported to Windows NT. * Added in the benchmark suite (larson, linux-scalability, shbench). version 1.0.1: * Fixed a build problem. version 1.0: * Initial release.