Notes about the Chrome memory allocator.

Background
----------
We use this library as a generic way to fork into any of several allocators.
Currently we can, at runtime, switch between:
   the default windows allocator
   the windows low-fragmentation-heap
   tcmalloc
   jemalloc (the heap used most notably within Mozilla Firefox)

The mechanism for hooking LIBCMT in windows is rather tricky.  The core
problem is that by default, the windows library does not declare malloc and
free as weak symbols.  Because of this, they cannot be overriden.  To work
around this, we start with the LIBCMT.LIB, and manually remove all allocator
related functions from it using the visual studio library tool.  Once removed,
we can now link against the library and provide custom versions of the 
allocator related functionality.


Source code
-----------
This directory contains just the allocator (i.e. shim) layer that switches
between the different underlying memory allocation implementations.

The tcmalloc and jemalloc libraries originate outside of Chromium
and exist in ../../third_party/tcmalloc and ../../third_party/jemalloc
(currently, the actual locations are defined in the allocator.gyp file).
The third party sources use a vendor-branch SCM pattern to track
Chromium-specific changes independently from upstream changes.

The general intent is to push local changes upstream so that over
time we no longer need any forked files.


Adding a new allocator
----------------------
Adding a new allocator requires definition of the following five functions:

  extern "C" {
    bool init();
    void* malloc(size_t s);
    void* realloc(void* p, size_t s);
    void free(void* s);
    size_t msize(void* p);
  }

All other allocation related functions (new/delete/calloc/etc) have been
implemented generically to work across all allocators.


Usage
-----
You can use the different allocators by setting the environment variable
CHROME_ALLOCATOR to:
   "tcmalloc"  - TC Malloc (default)
   "jemalloc"  - JE Malloc
   "winheap"   - Windows default heap
   "winlfh"    - Windows Low-Fragmentation heap
