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. |