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

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 library originates outside of Chromium and exists in
../../third_party/tcmalloc (currently, the actual location is 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)
   "winheap"   - Windows default heap
   "winlfh"    - Windows Low-Fragmentation heap
