1 Building and installing jemalloc can be as simple as typing the following while
2 in the root directory of the source tree:
8 === Advanced configuration =====================================================
10 The 'configure' script supports numerous options that allow control of which
11 functionality is enabled, where jemalloc is installed, etc. Optionally, pass
12 any of the following arguments (not a definitive list) to 'configure':
15 Print a definitive list of options.
17 --prefix=<install-root-dir>
18 Set the base directory in which to install. For example:
20 ./configure --prefix=/usr/local
22 will cause files to be installed into /usr/local/include, /usr/local/lib,
25 --with-rpath=<colon-separated-rpath>
26 Embed one or more library paths, so that libjemalloc can find the libraries
27 it is linked to. This works only on ELF-based systems.
30 Mangle public symbols specified in <map> which is a comma-separated list of
33 For example, to use ld's --wrap option as an alternative method for
34 overriding libc's malloc implementation, specify something like:
36 --with-mangling=malloc:__wrap_malloc,free:__wrap_free[...]
38 Note that mangling happens prior to application of the prefix specified by
39 --with-jemalloc-prefix, and mangled symbols are then ignored when applying
42 --with-jemalloc-prefix=<prefix>
43 Prefix all public APIs with <prefix>. For example, if <prefix> is
44 "prefix_", API changes like the following occur:
46 malloc() --> prefix_malloc()
47 malloc_conf --> prefix_malloc_conf
48 /etc/malloc.conf --> /etc/prefix_malloc.conf
49 MALLOC_CONF --> PREFIX_MALLOC_CONF
51 This makes it possible to use jemalloc at the same time as the system
52 allocator, or even to use multiple copies of jemalloc simultaneously.
54 By default, the prefix is "", except on OS X, where it is "je_". On OS X,
55 jemalloc overlays the default malloc zone, but makes no attempt to actually
56 replace the "malloc", "calloc", etc. symbols.
59 Don't export public APIs. This can be useful when building jemalloc as a
60 static library, or to avoid exporting public APIs when using the zone
63 --with-private-namespace=<prefix>
64 Prefix all library-private APIs with <prefix>je_. For shared libraries,
65 symbol visibility mechanisms prevent these symbols from being exported, but
66 for static libraries, naming collisions are a real possibility. By
67 default, <prefix> is empty, which results in a symbol prefix of je_ .
69 --with-install-suffix=<suffix>
70 Append <suffix> to the base name of all installed files, such that multiple
71 versions of jemalloc can coexist in the same installation directory. For
72 example, libjemalloc.so.0 becomes libjemalloc<suffix>.so.0.
75 Enable code that silences non-useful compiler warnings. This is helpful
76 when trying to tell serious warnings from those due to compiler
77 limitations, but it potentially incurs a performance penalty.
80 Enable assertions and validation code. This incurs a substantial
81 performance hit, but is very useful during application development.
82 Implies --enable-ivsalloc.
84 --enable-code-coverage
85 Enable code coverage support, for use during jemalloc test development.
86 Additional testing targets are available if this option is enabled:
93 These targets do not clear code coverage results from previous runs, and
94 there are interactions between the various coverage targets, so it is
95 usually advisable to run 'make clean' between repeated code coverage runs.
98 Enable validation code, which verifies that pointers reside within
99 jemalloc-owned chunks before dereferencing them. This incurs a substantial
103 Disable statistics gathering functionality. See the "opt.stats_print"
104 option documentation for usage details.
107 Enable heap profiling and leak detection functionality. See the "opt.prof"
108 option documentation for usage details. When enabled, there are several
109 approaches to backtracing, and the configure script chooses the first one
110 in the following list that appears to function correctly:
112 + libunwind (requires --enable-prof-libunwind)
113 + libgcc (unless --disable-prof-libgcc)
114 + gcc intrinsics (unless --disable-prof-gcc)
116 --enable-prof-libunwind
117 Use the libunwind library (http://www.nongnu.org/libunwind/) for stack
120 --disable-prof-libgcc
121 Disable the use of libgcc's backtracing functionality.
124 Disable the use of gcc intrinsics for backtracing.
126 --with-static-libunwind=<libunwind.a>
127 Statically link against the specified libunwind.a rather than dynamically
128 linking with -lunwind.
131 Disable thread-specific caches for small objects. Objects are cached and
132 released in bulk, thus reducing the total number of mutex operations. See
133 the "opt.tcache" option for usage details.
136 Enable huge realloc() via mremap(2). mremap() is disabled by default
137 because the flavor used is specific to Linux, which has a quirk in its
138 virtual memory allocation algorithm that causes semi-permanent VM map holes
139 under normal jemalloc operation.
142 Disable virtual memory deallocation via munmap(2); instead keep track of
143 the virtual memory for later use. munmap() is disabled by default (i.e.
144 --disable-munmap is implied) on Linux, which has a quirk in its virtual
145 memory allocation algorithm that causes semi-permanent VM map holes under
146 normal jemalloc operation.
149 Enable support for page allocation/deallocation via sbrk(2), in addition to
153 Disable support for junk/zero filling of memory, quarantine, and redzones.
154 See the "opt.junk", "opt.zero", "opt.quarantine", and "opt.redzone" option
155 documentation for usage details.
158 Disable support for Valgrind.
160 --disable-experimental
161 Disable support for the experimental API (*allocm()).
163 --disable-zone-allocator
164 Disable zone allocator for Darwin. This means jemalloc won't be hooked as
165 the default allocator on OSX/iOS.
168 Enable utrace(2)-based allocation tracing. This feature is not broadly
169 portable (FreeBSD has it, but Linux and OS X do not).
172 Enable support for optional immediate termination due to out-of-memory
173 errors, as is commonly implemented by "xmalloc" wrapper function for malloc.
174 See the "opt.xmalloc" option documentation for usage details.
177 Enable code that wraps pthread_create() to detect when an application
178 switches from single-threaded to multi-threaded mode, so that it can avoid
179 mutex locking/unlocking operations while in single-threaded mode. In
180 practice, this feature usually has little impact on performance unless
181 thread-specific caching is disabled.
184 Disable thread-local storage (TLS), which allows for fast access to
185 thread-local variables via the __thread keyword. If TLS is available,
186 jemalloc uses it for several purposes.
188 --with-xslroot=<path>
189 Specify where to find DocBook XSL stylesheets when building the
192 The following environment variables (not a definitive list) impact configure's
196 Pass these flags to the compiler. You probably shouldn't define this unless
197 you know what you are doing. (Use EXTRA_CFLAGS instead.)
200 Append these flags to CFLAGS. This makes it possible to add flags such as
201 -Werror, while allowing the configure script to determine what other flags
202 are appropriate for the specified configuration.
204 The configure script specifically checks whether an optimization flag (-O*)
205 is specified in EXTRA_CFLAGS, and refrains from specifying an optimization
206 level if it finds that one has already been specified.
209 Pass these flags to the C preprocessor. Note that CFLAGS is not passed to
210 'cpp' when 'configure' is looking for include files, so you must use
211 CPPFLAGS instead if you need to help 'configure' find header files.
214 'ld' uses this colon-separated list to find libraries.
217 Pass these flags when linking.
220 'configure' uses this to find programs.
222 === Advanced compilation =======================================================
224 To build only parts of jemalloc, use the following targets:
233 To install only parts of jemalloc, use the following targets:
244 To clean up build results to varying degrees, use the following make targets:
250 === Advanced installation ======================================================
252 Optionally, define make variables when invoking make, including (not
256 Use this as the installation prefix for header files.
259 Use this as the installation prefix for libraries.
262 Use this as the installation prefix for man pages.
265 Prepend DESTDIR to INCLUDEDIR, LIBDIR, DATADIR, and MANDIR. This is useful
266 when installing to a different path than was specified via --prefix.
269 Use this to invoke the C compiler.
272 Pass these flags to the compiler.
275 Pass these flags to the C preprocessor.
278 Pass these flags when linking.
281 Use this to search for programs used during configuration and building.
283 === Development ================================================================
285 If you intend to make non-trivial changes to jemalloc, use the 'autogen.sh'
286 script rather than 'configure'. This re-generates 'configure', enables
287 configuration dependency rules, and enables re-generation of automatically
288 generated source files.
290 The build system supports using an object directory separate from the source
291 tree. For example, you can create an 'obj' directory, and from within that
292 directory, issue configuration and build commands:
297 ../configure --enable-autogen
300 === Documentation ==============================================================
302 The manual page is generated in both html and roff formats. Any web browser
303 can be used to view the html manual. The roff manual page can be formatted
304 prior to installation via the following command:
306 nroff -man -t doc/jemalloc.3