• Home
  • History
  • Annotate
  • only in this directory
NameDateSize

..25-Jul-201981

dmalloc.cH A D25-Jul-2019218 KiB

HakefileH A D25-Jul-2019562

README.barrelfishH A D25-Jul-20191.9 KiB

README.barrelfish

1Name: dlmalloc
2Description: Doug Lea's Memory Allocator
3URL: http://g.oswego.edu/dl/html/malloc.html
4License: Public Domain
5Version: 2.8.6 (29 Aug 2012)
6
7Usage: add this to your program and link against libdmalloc.
8
9    #include <dmalloc/dmalloc.h>
10
11    typedef void *(*alt_malloc_t)(size_t bytes);
12    extern alt_malloc_t alt_malloc;
13
14    typedef void (*alt_free_t)(void *p);
15    extern alt_free_t alt_free;
16
17    typedef void *(*alt_realloc_t)(void *p, size_t bytes);
18    extern alt_realloc_t alt_realloc;
19
20    __attribute__((constructor)) static void init_dmalloc(void) {
21        alt_malloc = &dlmalloc;
22        alt_free = &dlfree;
23        alt_realloc = &dlrealloc;
24    }
25
26This vastly outperforms the default allocator in oldc and it is not unusual to
27see substantial performance improvements in large applications (e.g. SharedDB).
28
29The header file <dmalloc/dmalloc.h> exports the standard allocation routines
30(dlmalloc, dlfree, dlcalloc, dlrealloc) along with aligned/chunked variants and
31functions to retrieve statistics.
32
33Keep in mind there also may be some incompatibilities:
34* The switch to dlmalloc only happens once constructors functions run.  Ideally
35  this happen before any C++ ctors as they may allocate memory.  In addition,
36  there is a small window between `barrelfish_init_onthread` and `crtbegin`
37  where memory may be allocated via oldc.
38* Unresolved issue with domain spanning:
39  https://lists.inf.ethz.ch/pipermail/barrelfish-users/2013-February/000912.html
40
41Changes:
42* The header doesn't declare `dlmallinfo` or `struct mallinfo` because the
43  field types don't match with Newlib's <malloc.h> (size_t vs. int).  These are
44  still enabled in the implementation if you want to try though.
45* Similarly, support for independent allocation spaces (MSPACES=0) is not
46  exposed for now.
47* Allocates backing memory with morecore instead of mmap. Does not currently
48  release memory back to the system.
49* Uses Barrelfish mutex instead of its own custom spin lock variant.
50