1a4bd5210SJason Evans #ifndef JEMALLOC_H_ 2a4bd5210SJason Evans #define JEMALLOC_H_ 3a4bd5210SJason Evans #ifdef __cplusplus 4a4bd5210SJason Evans extern "C" { 5a4bd5210SJason Evans #endif 6a4bd5210SJason Evans 7f921d10fSJason Evans /* Defined if __attribute__((...)) syntax is supported. */ 8f921d10fSJason Evans #define JEMALLOC_HAVE_ATTR 9f921d10fSJason Evans 10d0e79aa3SJason Evans /* Defined if alloc_size attribute is supported. */ 11c5ad8142SEric van Gyzen #define JEMALLOC_HAVE_ATTR_ALLOC_SIZE 12c5ad8142SEric van Gyzen 13c5ad8142SEric van Gyzen /* Defined if format_arg(...) attribute is supported. */ 14c5ad8142SEric van Gyzen #define JEMALLOC_HAVE_ATTR_FORMAT_ARG 15d0e79aa3SJason Evans 16d0e79aa3SJason Evans /* Defined if format(gnu_printf, ...) attribute is supported. */ 17d0e79aa3SJason Evans /* #undef JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF */ 18d0e79aa3SJason Evans 19d0e79aa3SJason Evans /* Defined if format(printf, ...) attribute is supported. */ 20d0e79aa3SJason Evans #define JEMALLOC_HAVE_ATTR_FORMAT_PRINTF 21f921d10fSJason Evans 22f921d10fSJason Evans /* 23f921d10fSJason Evans * Define overrides for non-standard allocator-related functions if they are 24f921d10fSJason Evans * present on the system. 25f921d10fSJason Evans */ 26f921d10fSJason Evans /* #undef JEMALLOC_OVERRIDE_MEMALIGN */ 27f921d10fSJason Evans #define JEMALLOC_OVERRIDE_VALLOC 28f921d10fSJason Evans 29f921d10fSJason Evans /* 30f921d10fSJason Evans * At least Linux omits the "const" in: 31f921d10fSJason Evans * 32f921d10fSJason Evans * size_t malloc_usable_size(const void *ptr); 33f921d10fSJason Evans * 34f921d10fSJason Evans * Match the operating system's prototype. 35f921d10fSJason Evans */ 36f921d10fSJason Evans #define JEMALLOC_USABLE_SIZE_CONST const 37f921d10fSJason Evans 38d0e79aa3SJason Evans /* 39d0e79aa3SJason Evans * If defined, specify throw() for the public function prototypes when compiling 40d0e79aa3SJason Evans * with C++. The only justification for this is to match the prototypes that 41d0e79aa3SJason Evans * glibc defines. 42d0e79aa3SJason Evans */ 43d0e79aa3SJason Evans /* #undef JEMALLOC_USE_CXX_THROW */ 44d0e79aa3SJason Evans 45df0d881dSJason Evans #ifdef _MSC_VER 46df0d881dSJason Evans # ifdef _WIN64 47df0d881dSJason Evans # define LG_SIZEOF_PTR_WIN 3 48df0d881dSJason Evans # else 49df0d881dSJason Evans # define LG_SIZEOF_PTR_WIN 2 50df0d881dSJason Evans # endif 51df0d881dSJason Evans #endif 52df0d881dSJason Evans 53f921d10fSJason Evans /* sizeof(void *) == 2^LG_SIZEOF_PTR. */ 54f921d10fSJason Evans #define LG_SIZEOF_PTR 3 55f921d10fSJason Evans 56f921d10fSJason Evans /* 57f921d10fSJason Evans * Name mangling for public symbols is controlled by --with-mangling and 58f921d10fSJason Evans * --with-jemalloc-prefix. With default settings the je_ prefix is stripped by 59f921d10fSJason Evans * these macro definitions. 60f921d10fSJason Evans */ 61f921d10fSJason Evans #ifndef JEMALLOC_NO_RENAME 62b7eaed25SJason Evans # define je_aligned_alloc aligned_alloc 63b7eaed25SJason Evans # define je_calloc calloc 64b7eaed25SJason Evans # define je_dallocx dallocx 65b7eaed25SJason Evans # define je_free free 66b7eaed25SJason Evans # define je_mallctl mallctl 67b7eaed25SJason Evans # define je_mallctlbymib mallctlbymib 68b7eaed25SJason Evans # define je_mallctlnametomib mallctlnametomib 69b7eaed25SJason Evans # define je_malloc malloc 70f921d10fSJason Evans # define je_malloc_conf malloc_conf 71f921d10fSJason Evans # define je_malloc_message malloc_message 72f921d10fSJason Evans # define je_malloc_stats_print malloc_stats_print 73f921d10fSJason Evans # define je_malloc_usable_size malloc_usable_size 74b7eaed25SJason Evans # define je_mallocx mallocx 75c5ad8142SEric van Gyzen # define je_smallocx_ea6b3e973b477b8061e0076bb257dbd7f3faa756 smallocx_ea6b3e973b477b8061e0076bb257dbd7f3faa756 76b7eaed25SJason Evans # define je_nallocx nallocx 77b7eaed25SJason Evans # define je_posix_memalign posix_memalign 78b7eaed25SJason Evans # define je_rallocx rallocx 79b7eaed25SJason Evans # define je_realloc realloc 80b7eaed25SJason Evans # define je_sallocx sallocx 81b7eaed25SJason Evans # define je_sdallocx sdallocx 82b7eaed25SJason Evans # define je_xallocx xallocx 83f921d10fSJason Evans # define je_valloc valloc 84f921d10fSJason Evans #endif 85f921d10fSJason Evans 86f921d10fSJason Evans #include "jemalloc_FreeBSD.h" 87f921d10fSJason Evans 88d0e79aa3SJason Evans #include <stdlib.h> 89d0e79aa3SJason Evans #include <stdbool.h> 90d0e79aa3SJason Evans #include <stdint.h> 91a4bd5210SJason Evans #include <limits.h> 92a4bd5210SJason Evans #include <strings.h> 93a4bd5210SJason Evans 94c5ad8142SEric van Gyzen #define JEMALLOC_VERSION "5.2.1-0-gea6b3e973b477b8061e0076bb257dbd7f3faa756" 95b7eaed25SJason Evans #define JEMALLOC_VERSION_MAJOR 5 96c5ad8142SEric van Gyzen #define JEMALLOC_VERSION_MINOR 2 97c5ad8142SEric van Gyzen #define JEMALLOC_VERSION_BUGFIX 1 988b2f5aafSJason Evans #define JEMALLOC_VERSION_NREV 0 99c5ad8142SEric van Gyzen #define JEMALLOC_VERSION_GID "ea6b3e973b477b8061e0076bb257dbd7f3faa756" 100c5ad8142SEric van Gyzen #define JEMALLOC_VERSION_GID_IDENT ea6b3e973b477b8061e0076bb257dbd7f3faa756 101a4bd5210SJason Evans 102df0d881dSJason Evans #define MALLOCX_LG_ALIGN(la) ((int)(la)) 103f921d10fSJason Evans #if LG_SIZEOF_PTR == 2 1041f0a49e8SJason Evans # define MALLOCX_ALIGN(a) ((int)(ffs((int)(a))-1)) 105f921d10fSJason Evans #else 106f921d10fSJason Evans # define MALLOCX_ALIGN(a) \ 1071f0a49e8SJason Evans ((int)(((size_t)(a) < (size_t)INT_MAX) ? ffs((int)(a))-1 : \ 1081f0a49e8SJason Evans ffs((int)(((size_t)(a))>>32))+31)) 109f921d10fSJason Evans #endif 110f921d10fSJason Evans #define MALLOCX_ZERO ((int)0x40) 111d0e79aa3SJason Evans /* 112d0e79aa3SJason Evans * Bias tcache index bits so that 0 encodes "automatic tcache management", and 1 113d0e79aa3SJason Evans * encodes MALLOCX_TCACHE_NONE. 114d0e79aa3SJason Evans */ 115d0e79aa3SJason Evans #define MALLOCX_TCACHE(tc) ((int)(((tc)+2) << 8)) 116d0e79aa3SJason Evans #define MALLOCX_TCACHE_NONE MALLOCX_TCACHE(-1) 117d0e79aa3SJason Evans /* 118d0e79aa3SJason Evans * Bias arena index bits so that 0 encodes "use an automatically chosen arena". 119d0e79aa3SJason Evans */ 1201f0a49e8SJason Evans #define MALLOCX_ARENA(a) ((((int)(a))+1) << 20) 121a4bd5210SJason Evans 122b7eaed25SJason Evans /* 123b7eaed25SJason Evans * Use as arena index in "arena.<i>.{purge,decay,dss}" and 124b7eaed25SJason Evans * "stats.arenas.<i>.*" mallctl interfaces to select all arenas. This 125b7eaed25SJason Evans * definition is intentionally specified in raw decimal format to support 126b7eaed25SJason Evans * cpp-based string concatenation, e.g. 127b7eaed25SJason Evans * 128b7eaed25SJason Evans * #define STRINGIFY_HELPER(x) #x 129b7eaed25SJason Evans * #define STRINGIFY(x) STRINGIFY_HELPER(x) 130b7eaed25SJason Evans * 131b7eaed25SJason Evans * mallctl("arena." STRINGIFY(MALLCTL_ARENAS_ALL) ".purge", NULL, NULL, NULL, 132b7eaed25SJason Evans * 0); 133b7eaed25SJason Evans */ 134b7eaed25SJason Evans #define MALLCTL_ARENAS_ALL 4096 135b7eaed25SJason Evans /* 136b7eaed25SJason Evans * Use as arena index in "stats.arenas.<i>.*" mallctl interfaces to select 137b7eaed25SJason Evans * destroyed arenas. 138b7eaed25SJason Evans */ 139b7eaed25SJason Evans #define MALLCTL_ARENAS_DESTROYED 4097 140b7eaed25SJason Evans 141d0e79aa3SJason Evans #if defined(__cplusplus) && defined(JEMALLOC_USE_CXX_THROW) 142d0e79aa3SJason Evans # define JEMALLOC_CXX_THROW throw() 143a4bd5210SJason Evans #else 144d0e79aa3SJason Evans # define JEMALLOC_CXX_THROW 145a4bd5210SJason Evans #endif 146a4bd5210SJason Evans 147b7eaed25SJason Evans #if defined(_MSC_VER) 148f921d10fSJason Evans # define JEMALLOC_ATTR(s) 149d0e79aa3SJason Evans # define JEMALLOC_ALIGNED(s) __declspec(align(s)) 150d0e79aa3SJason Evans # define JEMALLOC_ALLOC_SIZE(s) 151d0e79aa3SJason Evans # define JEMALLOC_ALLOC_SIZE2(s1, s2) 152d0e79aa3SJason Evans # ifndef JEMALLOC_EXPORT 153f921d10fSJason Evans # ifdef DLLEXPORT 154f921d10fSJason Evans # define JEMALLOC_EXPORT __declspec(dllexport) 155f921d10fSJason Evans # else 156f921d10fSJason Evans # define JEMALLOC_EXPORT __declspec(dllimport) 157f921d10fSJason Evans # endif 158d0e79aa3SJason Evans # endif 159c5ad8142SEric van Gyzen # define JEMALLOC_FORMAT_ARG(i) 160d0e79aa3SJason Evans # define JEMALLOC_FORMAT_PRINTF(s, i) 161f921d10fSJason Evans # define JEMALLOC_NOINLINE __declspec(noinline) 162d0e79aa3SJason Evans # ifdef __cplusplus 163d0e79aa3SJason Evans # define JEMALLOC_NOTHROW __declspec(nothrow) 164d0e79aa3SJason Evans # else 165d0e79aa3SJason Evans # define JEMALLOC_NOTHROW 166d0e79aa3SJason Evans # endif 167d0e79aa3SJason Evans # define JEMALLOC_SECTION(s) __declspec(allocate(s)) 168d0e79aa3SJason Evans # define JEMALLOC_RESTRICT_RETURN __declspec(restrict) 169d0e79aa3SJason Evans # if _MSC_VER >= 1900 && !defined(__EDG__) 170d0e79aa3SJason Evans # define JEMALLOC_ALLOCATOR __declspec(allocator) 171d0e79aa3SJason Evans # else 172d0e79aa3SJason Evans # define JEMALLOC_ALLOCATOR 173d0e79aa3SJason Evans # endif 174df0d881dSJason Evans #elif defined(JEMALLOC_HAVE_ATTR) 175df0d881dSJason Evans # define JEMALLOC_ATTR(s) __attribute__((s)) 176df0d881dSJason Evans # define JEMALLOC_ALIGNED(s) JEMALLOC_ATTR(aligned(s)) 177df0d881dSJason Evans # ifdef JEMALLOC_HAVE_ATTR_ALLOC_SIZE 178df0d881dSJason Evans # define JEMALLOC_ALLOC_SIZE(s) JEMALLOC_ATTR(alloc_size(s)) 179df0d881dSJason Evans # define JEMALLOC_ALLOC_SIZE2(s1, s2) JEMALLOC_ATTR(alloc_size(s1, s2)) 180df0d881dSJason Evans # else 181df0d881dSJason Evans # define JEMALLOC_ALLOC_SIZE(s) 182df0d881dSJason Evans # define JEMALLOC_ALLOC_SIZE2(s1, s2) 183df0d881dSJason Evans # endif 184df0d881dSJason Evans # ifndef JEMALLOC_EXPORT 185df0d881dSJason Evans # define JEMALLOC_EXPORT JEMALLOC_ATTR(visibility("default")) 186df0d881dSJason Evans # endif 187c5ad8142SEric van Gyzen # ifdef JEMALLOC_HAVE_ATTR_FORMAT_ARG 188c5ad8142SEric van Gyzen # define JEMALLOC_FORMAT_ARG(i) JEMALLOC_ATTR(__format_arg__(3)) 189c5ad8142SEric van Gyzen # else 190c5ad8142SEric van Gyzen # define JEMALLOC_FORMAT_ARG(i) 191c5ad8142SEric van Gyzen # endif 192df0d881dSJason Evans # ifdef JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF 193df0d881dSJason Evans # define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(gnu_printf, s, i)) 194df0d881dSJason Evans # elif defined(JEMALLOC_HAVE_ATTR_FORMAT_PRINTF) 195df0d881dSJason Evans # define JEMALLOC_FORMAT_PRINTF(s, i) JEMALLOC_ATTR(format(printf, s, i)) 196df0d881dSJason Evans # else 197df0d881dSJason Evans # define JEMALLOC_FORMAT_PRINTF(s, i) 198df0d881dSJason Evans # endif 199df0d881dSJason Evans # define JEMALLOC_NOINLINE JEMALLOC_ATTR(noinline) 200df0d881dSJason Evans # define JEMALLOC_NOTHROW JEMALLOC_ATTR(nothrow) 201df0d881dSJason Evans # define JEMALLOC_SECTION(s) JEMALLOC_ATTR(section(s)) 202df0d881dSJason Evans # define JEMALLOC_RESTRICT_RETURN 203df0d881dSJason Evans # define JEMALLOC_ALLOCATOR 204f921d10fSJason Evans #else 205f921d10fSJason Evans # define JEMALLOC_ATTR(s) 206f921d10fSJason Evans # define JEMALLOC_ALIGNED(s) 207d0e79aa3SJason Evans # define JEMALLOC_ALLOC_SIZE(s) 208d0e79aa3SJason Evans # define JEMALLOC_ALLOC_SIZE2(s1, s2) 209d0e79aa3SJason Evans # define JEMALLOC_EXPORT 210d0e79aa3SJason Evans # define JEMALLOC_FORMAT_PRINTF(s, i) 211f921d10fSJason Evans # define JEMALLOC_NOINLINE 212d0e79aa3SJason Evans # define JEMALLOC_NOTHROW 213d0e79aa3SJason Evans # define JEMALLOC_SECTION(s) 214d0e79aa3SJason Evans # define JEMALLOC_RESTRICT_RETURN 215d0e79aa3SJason Evans # define JEMALLOC_ALLOCATOR 216f921d10fSJason Evans #endif 217f921d10fSJason Evans 218a4bd5210SJason Evans /* 219f921d10fSJason Evans * The je_ prefix on the following public symbol declarations is an artifact 220f921d10fSJason Evans * of namespace management, and should be omitted in application code unless 221f921d10fSJason Evans * JEMALLOC_NO_DEMANGLE is defined (see jemalloc_mangle.h). 222a4bd5210SJason Evans */ 223e722f8f8SJason Evans extern JEMALLOC_EXPORT const char *je_malloc_conf; 224e722f8f8SJason Evans extern JEMALLOC_EXPORT void (*je_malloc_message)(void *cbopaque, 225e722f8f8SJason Evans const char *s); 226a4bd5210SJason Evans 227d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 228d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_malloc(size_t size) 229d0e79aa3SJason Evans JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE(1); 230d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 231d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_calloc(size_t num, size_t size) 232d0e79aa3SJason Evans JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE2(1, 2); 233d0e79aa3SJason Evans JEMALLOC_EXPORT int JEMALLOC_NOTHROW je_posix_memalign(void **memptr, 234d0e79aa3SJason Evans size_t alignment, size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(nonnull(1)); 235d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 236d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_aligned_alloc(size_t alignment, 237d0e79aa3SJason Evans size_t size) JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc) 238d0e79aa3SJason Evans JEMALLOC_ALLOC_SIZE(2); 239d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 240d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_realloc(void *ptr, size_t size) 241d0e79aa3SJason Evans JEMALLOC_CXX_THROW JEMALLOC_ALLOC_SIZE(2); 242d0e79aa3SJason Evans JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_free(void *ptr) 243d0e79aa3SJason Evans JEMALLOC_CXX_THROW; 244a4bd5210SJason Evans 245d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 246d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_mallocx(size_t size, int flags) 247d0e79aa3SJason Evans JEMALLOC_ATTR(malloc) JEMALLOC_ALLOC_SIZE(1); 248d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 249d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_rallocx(void *ptr, size_t size, 250d0e79aa3SJason Evans int flags) JEMALLOC_ALLOC_SIZE(2); 251d0e79aa3SJason Evans JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_xallocx(void *ptr, size_t size, 252d0e79aa3SJason Evans size_t extra, int flags); 253d0e79aa3SJason Evans JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_sallocx(const void *ptr, 254d0e79aa3SJason Evans int flags) JEMALLOC_ATTR(pure); 255d0e79aa3SJason Evans JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_dallocx(void *ptr, int flags); 256d0e79aa3SJason Evans JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_sdallocx(void *ptr, size_t size, 257f921d10fSJason Evans int flags); 258d0e79aa3SJason Evans JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_nallocx(size_t size, int flags) 259d0e79aa3SJason Evans JEMALLOC_ATTR(pure); 260f921d10fSJason Evans 261d0e79aa3SJason Evans JEMALLOC_EXPORT int JEMALLOC_NOTHROW je_mallctl(const char *name, 262f921d10fSJason Evans void *oldp, size_t *oldlenp, void *newp, size_t newlen); 263d0e79aa3SJason Evans JEMALLOC_EXPORT int JEMALLOC_NOTHROW je_mallctlnametomib(const char *name, 264d0e79aa3SJason Evans size_t *mibp, size_t *miblenp); 265d0e79aa3SJason Evans JEMALLOC_EXPORT int JEMALLOC_NOTHROW je_mallctlbymib(const size_t *mib, 266d0e79aa3SJason Evans size_t miblen, void *oldp, size_t *oldlenp, void *newp, size_t newlen); 267d0e79aa3SJason Evans JEMALLOC_EXPORT void JEMALLOC_NOTHROW je_malloc_stats_print( 268d0e79aa3SJason Evans void (*write_cb)(void *, const char *), void *je_cbopaque, 269d0e79aa3SJason Evans const char *opts); 270d0e79aa3SJason Evans JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW je_malloc_usable_size( 271d0e79aa3SJason Evans JEMALLOC_USABLE_SIZE_CONST void *ptr) JEMALLOC_CXX_THROW; 272f921d10fSJason Evans 273e722f8f8SJason Evans #ifdef JEMALLOC_OVERRIDE_MEMALIGN 274d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 275d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_memalign(size_t alignment, size_t size) 276536b3538SJason Evans JEMALLOC_CXX_THROW JEMALLOC_ATTR(malloc); 277e722f8f8SJason Evans #endif 278e722f8f8SJason Evans 279e722f8f8SJason Evans #ifdef JEMALLOC_OVERRIDE_VALLOC 280d0e79aa3SJason Evans JEMALLOC_EXPORT JEMALLOC_ALLOCATOR JEMALLOC_RESTRICT_RETURN 281d0e79aa3SJason Evans void JEMALLOC_NOTHROW *je_valloc(size_t size) JEMALLOC_CXX_THROW 282d0e79aa3SJason Evans JEMALLOC_ATTR(malloc); 283e722f8f8SJason Evans #endif 284e722f8f8SJason Evans 285b7eaed25SJason Evans typedef struct extent_hooks_s extent_hooks_t; 286b7eaed25SJason Evans 287d0e79aa3SJason Evans /* 288d0e79aa3SJason Evans * void * 289b7eaed25SJason Evans * extent_alloc(extent_hooks_t *extent_hooks, void *new_addr, size_t size, 290b7eaed25SJason Evans * size_t alignment, bool *zero, bool *commit, unsigned arena_ind); 291d0e79aa3SJason Evans */ 292b7eaed25SJason Evans typedef void *(extent_alloc_t)(extent_hooks_t *, void *, size_t, size_t, bool *, 293b7eaed25SJason Evans bool *, unsigned); 294d0e79aa3SJason Evans 295d0e79aa3SJason Evans /* 296d0e79aa3SJason Evans * bool 297b7eaed25SJason Evans * extent_dalloc(extent_hooks_t *extent_hooks, void *addr, size_t size, 298d0e79aa3SJason Evans * bool committed, unsigned arena_ind); 299d0e79aa3SJason Evans */ 300b7eaed25SJason Evans typedef bool (extent_dalloc_t)(extent_hooks_t *, void *, size_t, bool, 301b7eaed25SJason Evans unsigned); 302b7eaed25SJason Evans 303b7eaed25SJason Evans /* 304b7eaed25SJason Evans * void 305b7eaed25SJason Evans * extent_destroy(extent_hooks_t *extent_hooks, void *addr, size_t size, 306b7eaed25SJason Evans * bool committed, unsigned arena_ind); 307b7eaed25SJason Evans */ 308b7eaed25SJason Evans typedef void (extent_destroy_t)(extent_hooks_t *, void *, size_t, bool, 309b7eaed25SJason Evans unsigned); 310d0e79aa3SJason Evans 311d0e79aa3SJason Evans /* 312d0e79aa3SJason Evans * bool 313b7eaed25SJason Evans * extent_commit(extent_hooks_t *extent_hooks, void *addr, size_t size, 314b7eaed25SJason Evans * size_t offset, size_t length, unsigned arena_ind); 315d0e79aa3SJason Evans */ 316b7eaed25SJason Evans typedef bool (extent_commit_t)(extent_hooks_t *, void *, size_t, size_t, size_t, 317b7eaed25SJason Evans unsigned); 318d0e79aa3SJason Evans 319b7eaed25SJason Evans /* 320b7eaed25SJason Evans * bool 321b7eaed25SJason Evans * extent_decommit(extent_hooks_t *extent_hooks, void *addr, size_t size, 322b7eaed25SJason Evans * size_t offset, size_t length, unsigned arena_ind); 323b7eaed25SJason Evans */ 324b7eaed25SJason Evans typedef bool (extent_decommit_t)(extent_hooks_t *, void *, size_t, size_t, 325b7eaed25SJason Evans size_t, unsigned); 326b7eaed25SJason Evans 327b7eaed25SJason Evans /* 328b7eaed25SJason Evans * bool 329b7eaed25SJason Evans * extent_purge(extent_hooks_t *extent_hooks, void *addr, size_t size, 330b7eaed25SJason Evans * size_t offset, size_t length, unsigned arena_ind); 331b7eaed25SJason Evans */ 332b7eaed25SJason Evans typedef bool (extent_purge_t)(extent_hooks_t *, void *, size_t, size_t, size_t, 333b7eaed25SJason Evans unsigned); 334b7eaed25SJason Evans 335b7eaed25SJason Evans /* 336b7eaed25SJason Evans * bool 337b7eaed25SJason Evans * extent_split(extent_hooks_t *extent_hooks, void *addr, size_t size, 338b7eaed25SJason Evans * size_t size_a, size_t size_b, bool committed, unsigned arena_ind); 339b7eaed25SJason Evans */ 340b7eaed25SJason Evans typedef bool (extent_split_t)(extent_hooks_t *, void *, size_t, size_t, size_t, 341b7eaed25SJason Evans bool, unsigned); 342b7eaed25SJason Evans 343b7eaed25SJason Evans /* 344b7eaed25SJason Evans * bool 345b7eaed25SJason Evans * extent_merge(extent_hooks_t *extent_hooks, void *addr_a, size_t size_a, 346b7eaed25SJason Evans * void *addr_b, size_t size_b, bool committed, unsigned arena_ind); 347b7eaed25SJason Evans */ 348b7eaed25SJason Evans typedef bool (extent_merge_t)(extent_hooks_t *, void *, size_t, void *, size_t, 349b7eaed25SJason Evans bool, unsigned); 350b7eaed25SJason Evans 351b7eaed25SJason Evans struct extent_hooks_s { 352b7eaed25SJason Evans extent_alloc_t *alloc; 353b7eaed25SJason Evans extent_dalloc_t *dalloc; 354b7eaed25SJason Evans extent_destroy_t *destroy; 355b7eaed25SJason Evans extent_commit_t *commit; 356b7eaed25SJason Evans extent_decommit_t *decommit; 357b7eaed25SJason Evans extent_purge_t *purge_lazy; 358b7eaed25SJason Evans extent_purge_t *purge_forced; 359b7eaed25SJason Evans extent_split_t *split; 360b7eaed25SJason Evans extent_merge_t *merge; 361b7eaed25SJason Evans }; 362a4bd5210SJason Evans 363a4bd5210SJason Evans /* 364a4bd5210SJason Evans * By default application code must explicitly refer to mangled symbol names, 365a4bd5210SJason Evans * so that it is possible to use jemalloc in conjunction with another allocator 366a4bd5210SJason Evans * in the same application. Define JEMALLOC_MANGLE in order to cause automatic 367a4bd5210SJason Evans * name mangling that matches the API prefixing that happened as a result of 368a4bd5210SJason Evans * --with-mangling and/or --with-jemalloc-prefix configuration settings. 369a4bd5210SJason Evans */ 370a4bd5210SJason Evans #ifdef JEMALLOC_MANGLE 371a4bd5210SJason Evans # ifndef JEMALLOC_NO_DEMANGLE 372a4bd5210SJason Evans # define JEMALLOC_NO_DEMANGLE 373a4bd5210SJason Evans # endif 374b7eaed25SJason Evans # define aligned_alloc je_aligned_alloc 375b7eaed25SJason Evans # define calloc je_calloc 376b7eaed25SJason Evans # define dallocx je_dallocx 377b7eaed25SJason Evans # define free je_free 378b7eaed25SJason Evans # define mallctl je_mallctl 379b7eaed25SJason Evans # define mallctlbymib je_mallctlbymib 380b7eaed25SJason Evans # define mallctlnametomib je_mallctlnametomib 381b7eaed25SJason Evans # define malloc je_malloc 382a4bd5210SJason Evans # define malloc_conf je_malloc_conf 383a4bd5210SJason Evans # define malloc_message je_malloc_message 384f921d10fSJason Evans # define malloc_stats_print je_malloc_stats_print 385f921d10fSJason Evans # define malloc_usable_size je_malloc_usable_size 386b7eaed25SJason Evans # define mallocx je_mallocx 387c5ad8142SEric van Gyzen # define smallocx_ea6b3e973b477b8061e0076bb257dbd7f3faa756 je_smallocx_ea6b3e973b477b8061e0076bb257dbd7f3faa756 388b7eaed25SJason Evans # define nallocx je_nallocx 389b7eaed25SJason Evans # define posix_memalign je_posix_memalign 390b7eaed25SJason Evans # define rallocx je_rallocx 391b7eaed25SJason Evans # define realloc je_realloc 392b7eaed25SJason Evans # define sallocx je_sallocx 393b7eaed25SJason Evans # define sdallocx je_sdallocx 394b7eaed25SJason Evans # define xallocx je_xallocx 395a4bd5210SJason Evans # define valloc je_valloc 396a4bd5210SJason Evans #endif 397a4bd5210SJason Evans 398a4bd5210SJason Evans /* 399f921d10fSJason Evans * The je_* macros can be used as stable alternative names for the 400f921d10fSJason Evans * public jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily 401f921d10fSJason Evans * meant for use in jemalloc itself, but it can be used by application code to 402a4bd5210SJason Evans * provide isolation from the name mangling specified via --with-mangling 403a4bd5210SJason Evans * and/or --with-jemalloc-prefix. 404a4bd5210SJason Evans */ 405a4bd5210SJason Evans #ifndef JEMALLOC_NO_DEMANGLE 406b7eaed25SJason Evans # undef je_aligned_alloc 407b7eaed25SJason Evans # undef je_calloc 408b7eaed25SJason Evans # undef je_dallocx 409b7eaed25SJason Evans # undef je_free 410b7eaed25SJason Evans # undef je_mallctl 411b7eaed25SJason Evans # undef je_mallctlbymib 412b7eaed25SJason Evans # undef je_mallctlnametomib 413b7eaed25SJason Evans # undef je_malloc 414a4bd5210SJason Evans # undef je_malloc_conf 415a4bd5210SJason Evans # undef je_malloc_message 416f921d10fSJason Evans # undef je_malloc_stats_print 417f921d10fSJason Evans # undef je_malloc_usable_size 418b7eaed25SJason Evans # undef je_mallocx 419c5ad8142SEric van Gyzen # undef je_smallocx_ea6b3e973b477b8061e0076bb257dbd7f3faa756 420b7eaed25SJason Evans # undef je_nallocx 421b7eaed25SJason Evans # undef je_posix_memalign 422b7eaed25SJason Evans # undef je_rallocx 423b7eaed25SJason Evans # undef je_realloc 424b7eaed25SJason Evans # undef je_sallocx 425b7eaed25SJason Evans # undef je_sdallocx 426b7eaed25SJason Evans # undef je_xallocx 427a4bd5210SJason Evans # undef je_valloc 428a4bd5210SJason Evans #endif 429a4bd5210SJason Evans 430a4bd5210SJason Evans #ifdef __cplusplus 431d0e79aa3SJason Evans } 432a4bd5210SJason Evans #endif 433a4bd5210SJason Evans #endif /* JEMALLOC_H_ */ 434