Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Adam b4a8d373d8
Create README.md
4 years ago
..
makefile initial commit 4 years ago
readme.txt initial commit 4 years ago
tmpheap.c initial commit 4 years ago

readme.txt

Multithreaded Heap Manager


Summary
-------

The MPHEAP sample is a DLL that provides an implementation of multiple heaps
and serializes access to the heaps. It will only work on Windows NT 4.0 and
later.

Many multithreaded applications that use the standard memory allocation
routines pay a significant performance penalty when running on a
multiprocessor machine. This is due to the serialization used by the
default heap. On a multiprocessor machine, more than one thread may try to
allocate memory simultaneously. One thread will block on the critical section
guarding the heap. The other thread must then signal the critical section
when it is finished to release the waiting thread. This adds significant
overhead.

By providing multiple heaps, MPHEAP.DLL allows simultaneous operations on
each heap. A thread on processor 0 can allocate memory from one heap
at the same time that a thread on processor 1 is allocating from a
different heap. The additional overhead in this DLL is offset by
drastically reducing the number of times a thread must wait for heap access.

The TMPHEAP sample is a simple program that demonstrates the functionality of
MPHEAP.DLL.

More Information
----------------

The basic scheme is to attempt to lock each heap in turn with the
TryEnterCriticalSection function. This will enter the critical section if
it is unowned. If the critical section is owned by a different thread,
TryEnterCriticalSection returns failure instead of blocking until the
other thread leaves the critical section.

Another trick to increase performance is the use of a lookaside list to
satisfy frequent allocations. By using InterlockedExchange to remove
lookaside list entries and InterlockedCompareExchange to add lookaside
list entries, allocations and frees can be completed without needing a
critical section lock.

The final trick is the use of delayed frees. If a chunk of memory is
being freed, and the required lock is already held by a different
thread, the free block is simply added to a delayed free list and the
function completes immediately. The next thread to acquire the heap lock
will free everything on the list.

Every application uses memory allocation routines in different ways.
To allow better tuning, MpHeapGetStatistics allows an application to monitor
the contention. Increasing the number of heaps increases the potential
concurrency, but also increases memory overhead. Some experimentation
is recommended to determine the optimal settings for a given number of
processors.

Some applications can benefit from additional techniques. For example,
per-thread lookaside lists for common allocation sizes can be very
effective. No locking is required for a per-thread structure, since no
other thread will ever be accessing it. Because each thread reuses the
same memory, per-thread structures also improve locality of reference.