diff options
author | sgk@chromium.org <sgk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-25 03:21:47 +0000 |
---|---|---|
committer | sgk@chromium.org <sgk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-25 03:21:47 +0000 |
commit | 6a7e698052d3b0d0aafebd5ac6af0ef2f95ff2a9 (patch) | |
tree | 92133e44fa5b002e390da3b90c2aa7b1477c0a87 /base/allocator/README | |
parent | 8fa0b967bf38ffec49daf8cceed81603ed4316a7 (diff) | |
download | chromium_src-6a7e698052d3b0d0aafebd5ac6af0ef2f95ff2a9.zip chromium_src-6a7e698052d3b0d0aafebd5ac6af0ef2f95ff2a9.tar.gz chromium_src-6a7e698052d3b0d0aafebd5ac6af0ef2f95ff2a9.tar.bz2 |
Branch the files in the shim layer that switches between the
memory allocation implementations (tcmalloc, jemalloc, etc.) into a
base\allocator library.
BUG=27911
TEST=none
Review URL: http://codereview.chromium.org/434067
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33043 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/allocator/README')
-rw-r--r-- | base/allocator/README | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/base/allocator/README b/base/allocator/README new file mode 100644 index 0000000..ec8a707 --- /dev/null +++ b/base/allocator/README @@ -0,0 +1,59 @@ +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 |