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.