| Index: third_party/tcmalloc/README
|
| ===================================================================
|
| --- third_party/tcmalloc/README (revision 0)
|
| +++ third_party/tcmalloc/README (revision 0)
|
| @@ -0,0 +1,60 @@
|
| +Notes about the Chrome port of tcmalloc & jemalloc.
|
| +
|
| +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
|
| +-----------
|
| +Everything within the directory tcmalloc/tcmalloc is pulled directly from the
|
| +google-perftools repository. For the most part, tcmalloc is a stock build
|
| +from there.
|
| +
|
| +We have forked a few files. We always push our changes upstream, so over
|
| +time the forked files should disappear. Currently forked files include:
|
| + page_heap.cc
|
| + port.cc
|
| + system-alloc.cc
|
| + system-alloc.h
|
| + tcmalloc.cc
|
| +
|
| +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
|
| +
|
| +
|
| +Local modifications
|
| +-------------------
|
| +jemalloc has been modified slightly to work within the Chromium build.
|
|
|