#ifndef JEMALLOC_H_ #define JEMALLOC_H_ #ifdef __cplusplus extern "C" { #endif #include #include #define JEMALLOC_VERSION "@jemalloc_version@" #define JEMALLOC_VERSION_MAJOR @jemalloc_version_major@ #define JEMALLOC_VERSION_MINOR @jemalloc_version_minor@ #define JEMALLOC_VERSION_BUGFIX @jemalloc_version_bugfix@ #define JEMALLOC_VERSION_NREV @jemalloc_version_nrev@ #define JEMALLOC_VERSION_GID "@jemalloc_version_gid@" #include "jemalloc_defs@install_suffix@.h" #define ALLOCM_LG_ALIGN(la) (la) #if LG_SIZEOF_PTR == 2 #define ALLOCM_ALIGN(a) (ffs(a)-1) #else #define ALLOCM_ALIGN(a) ((a < (size_t)INT_MAX) ? ffs(a)-1 : ffs(a>>32)+31) #endif #define ALLOCM_ZERO ((int)0x40) #define ALLOCM_NO_MOVE ((int)0x80) #define ALLOCM_SUCCESS 0 #define ALLOCM_ERR_OOM 1 #define ALLOCM_ERR_NOT_MOVED 2 /* * The je_ prefix on the following public symbol declarations is an artifact of * namespace management, and should be omitted in application code unless * JEMALLOC_NO_DEMANGLE is defined (see below). */ extern const char *je_malloc_conf; extern void (*je_malloc_message)(void *, const char *); void *je_malloc(size_t size) JEMALLOC_ATTR(malloc); void *je_calloc(size_t num, size_t size) JEMALLOC_ATTR(malloc); int je_posix_memalign(void **memptr, size_t alignment, size_t size) JEMALLOC_ATTR(nonnull(1)); void *je_realloc(void *ptr, size_t size); void je_free(void *ptr); size_t je_malloc_usable_size(const void *ptr); void je_malloc_stats_print(void (*write_cb)(void *, const char *), void *je_cbopaque, const char *opts); int je_mallctl(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen); int je_mallctlnametomib(const char *name, size_t *mibp, size_t *miblenp); int je_mallctlbymib(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp, void *newp, size_t newlen); int je_allocm(void **ptr, size_t *rsize, size_t size, int flags) JEMALLOC_ATTR(nonnull(1)); int je_rallocm(void **ptr, size_t *rsize, size_t size, size_t extra, int flags) JEMALLOC_ATTR(nonnull(1)); int je_sallocm(const void *ptr, size_t *rsize, int flags) JEMALLOC_ATTR(nonnull(1)); int je_dallocm(void *ptr, int flags) JEMALLOC_ATTR(nonnull(1)); int je_nallocm(size_t *rsize, size_t size, int flags); /* * By default application code must explicitly refer to mangled symbol names, * so that it is possible to use jemalloc in conjunction with another allocator * in the same application. Define JEMALLOC_MANGLE in order to cause automatic * name mangling that matches the API prefixing that happened as a result of * --with-mangling and/or --with-jemalloc-prefix configuration settings. */ #ifdef JEMALLOC_MANGLE #ifndef JEMALLOC_NO_DEMANGLE #define JEMALLOC_NO_DEMANGLE #endif #define malloc_conf je_malloc_conf #define malloc_message je_malloc_message #define malloc je_malloc #define calloc je_calloc #define posix_memalign je_posix_memalign #define realloc je_realloc #define free je_free #define malloc_usable_size je_malloc_usable_size #define malloc_stats_print je_malloc_stats_print #define mallctl je_mallctl #define mallctlnametomib je_mallctlnametomib #define mallctlbymib je_mallctlbymib #define memalign je_memalign #define valloc je_valloc #define allocm je_allocm #define rallocm je_rallocm #define sallocm je_sallocm #define dallocm je_dallocm #define nallocm je_nallocm #endif /* * The je_* macros can be used as stable alternative names for the public * jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily meant * for use in jemalloc itself, but it can be used by application code to * provide isolation from the name mangling specified via --with-mangling * and/or --with-jemalloc-prefix. */ #ifndef JEMALLOC_NO_DEMANGLE #undef je_malloc_conf #undef je_malloc_message #undef je_malloc #undef je_calloc #undef je_posix_memalign #undef je_realloc #undef je_free #undef je_malloc_usable_size #undef je_malloc_stats_print #undef je_mallctl #undef je_mallctlnametomib #undef je_mallctlbymib #undef je_memalign #undef je_valloc #undef je_allocm #undef je_rallocm #undef je_sallocm #undef je_dallocm #undef je_nallocm #endif #ifdef __cplusplus }; #endif #endif /* JEMALLOC_H_ */