LeapHeap History (latest news at the top of the page)

VERSION 1.4 released Jan 10 2005
Summary of changes
The installation instructions in the user guide have been changed to cater for Microsoft Windows Server 2003, which has a different method of loading local DLLs. There is no change to the LeapHeap code.

VERSION 1.3 released Jun 25 2004
Summary of changes
The small-block algorithm has been modified so that each thread (up to 32 in number) 'prefers' a different bit in the top bitmap tier, thereby reducing cache contention on multiprocessor machines and increasing locality. Defect D4 (failures reported with Microsoft Windows 2000 Service Pack 4) fixed.

DEFECT D3 Failures reported with Microsoft Windows 2000 Service Pack 4
AFFECTS: Versions 1.2, 1.1 and 1.0
FIXED IN: Version 1.3
In Windows 2000 SP4 (and perhaps other recent releases) there is a bug in the implementation of the LoadLibraryEx function that causes both copies, the LeapHeap modified version and the Microsoft original, of some system DLLs to be loaded. The problem can be avoided by the use of a DLL redirection file, so the fix consists of a documentation change.

VERSION 1.2 released Jun 5 2003
Summary of changes
The algorithm for allocating and freeing large blocks has been replaced. The new algorithm manipulates an off-heap list of memory-block descriptors and is unambiguously parallel. Defect D2 (Poor performance with large block sizes) fixed.

DEFECT D2 Poor performance with large block sizes
AFFECTS: Versions 1.1 and 1.0
FIXED IN: Version 1.2
LeapHeap may underperform the Microsoft Windows native heap for applications that traffic heavily in memory allocations greater than 4KB in size. LeapHeap stores such allocations as a linear chain of blocks carved from a 100MB (default) block of address range. LeapFree does not coalesce a freed block with any adjacent free block in the chain. With many memory allocation patterns this leads to progressive colonisation of the entire 100MB address range; ultimately LeapHeap will perform 'emergency coalesce' under mutual exclusion to defragment the big-block area. The native heap also performs linear search of a chain of (free) blocks for large allocations. LeapHeap suffers in comparison for a number of reasons:
(a) The LeapHeap chain has more free blocks because LeapHeap does not coalesce free blocks whereas the Microsoft algorithm does (by default).
(b) The LeapHeap chain holds allocated as well as free blocks.
(c) Touching even an allocated block (in order to read its status and length) may induce a page fault if the block has not recently been accessed by the application.
These factors can markedly increase the RAM demand of an application running with LeapHeap and cause it to thrash the hard drive, with the native heap still comfortable under the same loading.

VERSION 1.1 released Jan 12 2003
Summary of changes
The first version compatible with Windows XP. Remains compatible with earlier versions of Windows NT. Export table in 'leapheap.dll' enlarged to cater for the larger APIs in XP. Defect D1 (Mis-implementation of RtlCreateHeap) fixed. User guide updated to reflect compatibility with Windows XP.

DEFECT D1 Mis-implementation of RtlCreateHeap
AFFECTS: Version1.0
FIXED IN: Version 1.1
The Win32 API function HeapCreate and the native API function RtlCreateHeap are both vectored to the same LeapHeap function by the file installer. However RtlCreateHeap takes a different number of parameters. Therefore if any system DLL calls RtlCreateHeap, the call stack is corrupted. The effect is likely to be obvious failure of the application with an access violation or illegal instruction trap, though the possibility of the application continuing and giving erroneous results cannot be ruled out. It is not known which applications are affected; the fault was discovered in-house while upgrading for Windows XP.

VERSION 1.0 released Sep 11 2002
The original release. Compatible with Windows NT and Windows 2000.