1234370Sjasone#ifndef JEMALLOC_H_ 2234370Sjasone#define JEMALLOC_H_ 3234370Sjasone#ifdef __cplusplus 4234370Sjasoneextern "C" { 5234370Sjasone#endif 6234370Sjasone 7234370Sjasone#include <limits.h> 8234370Sjasone#include <strings.h> 9234370Sjasone 10251300Sjasone#define JEMALLOC_VERSION "3.4.0-0-g0ed518e5dab789ad2171bb38977a8927e2a26775" 11235322Sjasone#define JEMALLOC_VERSION_MAJOR 3 12251300Sjasone#define JEMALLOC_VERSION_MINOR 4 13234370Sjasone#define JEMALLOC_VERSION_BUGFIX 0 14235322Sjasone#define JEMALLOC_VERSION_NREV 0 15251300Sjasone#define JEMALLOC_VERSION_GID "0ed518e5dab789ad2171bb38977a8927e2a26775" 16234370Sjasone 17234370Sjasone#include "jemalloc_defs.h" 18234370Sjasone#include "jemalloc_FreeBSD.h" 19234370Sjasone 20234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL 21234370Sjasone#define ALLOCM_LG_ALIGN(la) (la) 22234370Sjasone#if LG_SIZEOF_PTR == 2 23234370Sjasone#define ALLOCM_ALIGN(a) (ffs(a)-1) 24234370Sjasone#else 25234370Sjasone#define ALLOCM_ALIGN(a) ((a < (size_t)INT_MAX) ? ffs(a)-1 : ffs(a>>32)+31) 26234370Sjasone#endif 27234370Sjasone#define ALLOCM_ZERO ((int)0x40) 28234370Sjasone#define ALLOCM_NO_MOVE ((int)0x80) 29242844Sjasone/* Bias arena index bits so that 0 encodes "ALLOCM_ARENA() unspecified". */ 30242844Sjasone#define ALLOCM_ARENA(a) ((int)(((a)+1) << 8)) 31234370Sjasone 32234370Sjasone#define ALLOCM_SUCCESS 0 33234370Sjasone#define ALLOCM_ERR_OOM 1 34234370Sjasone#define ALLOCM_ERR_NOT_MOVED 2 35234370Sjasone#endif 36234370Sjasone 37234370Sjasone/* 38234370Sjasone * The je_ prefix on the following public symbol declarations is an artifact of 39234370Sjasone * namespace management, and should be omitted in application code unless 40234370Sjasone * JEMALLOC_NO_DEMANGLE is defined (see below). 41234370Sjasone */ 42235238Sjasoneextern JEMALLOC_EXPORT const char *je_malloc_conf; 43235238Sjasoneextern JEMALLOC_EXPORT void (*je_malloc_message)(void *cbopaque, 44235238Sjasone const char *s); 45234370Sjasone 46235238SjasoneJEMALLOC_EXPORT void *je_malloc(size_t size) JEMALLOC_ATTR(malloc); 47235238SjasoneJEMALLOC_EXPORT void *je_calloc(size_t num, size_t size) 48235238Sjasone JEMALLOC_ATTR(malloc); 49235238SjasoneJEMALLOC_EXPORT int je_posix_memalign(void **memptr, size_t alignment, 50235238Sjasone size_t size) JEMALLOC_ATTR(nonnull(1)); 51235238SjasoneJEMALLOC_EXPORT void *je_aligned_alloc(size_t alignment, size_t size) 52235238Sjasone JEMALLOC_ATTR(malloc); 53235238SjasoneJEMALLOC_EXPORT void *je_realloc(void *ptr, size_t size); 54235238SjasoneJEMALLOC_EXPORT void je_free(void *ptr); 55234370Sjasone 56235238Sjasone#ifdef JEMALLOC_OVERRIDE_MEMALIGN 57235238SjasoneJEMALLOC_EXPORT void * je_memalign(size_t alignment, size_t size) 58235238Sjasone JEMALLOC_ATTR(malloc); 59235238Sjasone#endif 60235238Sjasone 61235238Sjasone#ifdef JEMALLOC_OVERRIDE_VALLOC 62235238SjasoneJEMALLOC_EXPORT void * je_valloc(size_t size) JEMALLOC_ATTR(malloc); 63235238Sjasone#endif 64235238Sjasone 65242844SjasoneJEMALLOC_EXPORT size_t je_malloc_usable_size( 66242844Sjasone JEMALLOC_USABLE_SIZE_CONST void *ptr); 67235238SjasoneJEMALLOC_EXPORT void je_malloc_stats_print(void (*write_cb)(void *, 68235238Sjasone const char *), void *je_cbopaque, const char *opts); 69235238SjasoneJEMALLOC_EXPORT int je_mallctl(const char *name, void *oldp, 70234370Sjasone size_t *oldlenp, void *newp, size_t newlen); 71235238SjasoneJEMALLOC_EXPORT int je_mallctlnametomib(const char *name, size_t *mibp, 72235238Sjasone size_t *miblenp); 73235238SjasoneJEMALLOC_EXPORT int je_mallctlbymib(const size_t *mib, size_t miblen, 74235238Sjasone void *oldp, size_t *oldlenp, void *newp, size_t newlen); 75234370Sjasone 76234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL 77235238SjasoneJEMALLOC_EXPORT int je_allocm(void **ptr, size_t *rsize, size_t size, 78234370Sjasone int flags) JEMALLOC_ATTR(nonnull(1)); 79235238SjasoneJEMALLOC_EXPORT int je_rallocm(void **ptr, size_t *rsize, size_t size, 80235238Sjasone size_t extra, int flags) JEMALLOC_ATTR(nonnull(1)); 81235238SjasoneJEMALLOC_EXPORT int je_sallocm(const void *ptr, size_t *rsize, int flags) 82234370Sjasone JEMALLOC_ATTR(nonnull(1)); 83235238SjasoneJEMALLOC_EXPORT int je_dallocm(void *ptr, int flags) 84235238Sjasone JEMALLOC_ATTR(nonnull(1)); 85235238SjasoneJEMALLOC_EXPORT int je_nallocm(size_t *rsize, size_t size, int flags); 86234370Sjasone#endif 87234370Sjasone 88234370Sjasone/* 89234370Sjasone * By default application code must explicitly refer to mangled symbol names, 90234370Sjasone * so that it is possible to use jemalloc in conjunction with another allocator 91234370Sjasone * in the same application. Define JEMALLOC_MANGLE in order to cause automatic 92234370Sjasone * name mangling that matches the API prefixing that happened as a result of 93234370Sjasone * --with-mangling and/or --with-jemalloc-prefix configuration settings. 94234370Sjasone */ 95234370Sjasone#ifdef JEMALLOC_MANGLE 96234370Sjasone#ifndef JEMALLOC_NO_DEMANGLE 97234370Sjasone#define JEMALLOC_NO_DEMANGLE 98234370Sjasone#endif 99234370Sjasone#define malloc_conf je_malloc_conf 100234370Sjasone#define malloc_message je_malloc_message 101234370Sjasone#define malloc je_malloc 102234370Sjasone#define calloc je_calloc 103234370Sjasone#define posix_memalign je_posix_memalign 104234370Sjasone#define aligned_alloc je_aligned_alloc 105234370Sjasone#define realloc je_realloc 106234370Sjasone#define free je_free 107234370Sjasone#define malloc_usable_size je_malloc_usable_size 108234370Sjasone#define malloc_stats_print je_malloc_stats_print 109234370Sjasone#define mallctl je_mallctl 110234370Sjasone#define mallctlnametomib je_mallctlnametomib 111234370Sjasone#define mallctlbymib je_mallctlbymib 112234370Sjasone#define memalign je_memalign 113234370Sjasone#define valloc je_valloc 114234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL 115234370Sjasone#define allocm je_allocm 116234370Sjasone#define rallocm je_rallocm 117234370Sjasone#define sallocm je_sallocm 118234370Sjasone#define dallocm je_dallocm 119234370Sjasone#define nallocm je_nallocm 120234370Sjasone#endif 121234370Sjasone#endif 122234370Sjasone 123234370Sjasone/* 124234370Sjasone * The je_* macros can be used as stable alternative names for the public 125234370Sjasone * jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily meant 126234370Sjasone * for use in jemalloc itself, but it can be used by application code to 127234370Sjasone * provide isolation from the name mangling specified via --with-mangling 128234370Sjasone * and/or --with-jemalloc-prefix. 129234370Sjasone */ 130234370Sjasone#ifndef JEMALLOC_NO_DEMANGLE 131234370Sjasone#undef je_malloc_conf 132234370Sjasone#undef je_malloc_message 133234370Sjasone#undef je_malloc 134234370Sjasone#undef je_calloc 135234370Sjasone#undef je_posix_memalign 136234370Sjasone#undef je_aligned_alloc 137234370Sjasone#undef je_realloc 138234370Sjasone#undef je_free 139234370Sjasone#undef je_malloc_usable_size 140234370Sjasone#undef je_malloc_stats_print 141234370Sjasone#undef je_mallctl 142234370Sjasone#undef je_mallctlnametomib 143234370Sjasone#undef je_mallctlbymib 144234370Sjasone#undef je_memalign 145234370Sjasone#undef je_valloc 146234370Sjasone#ifdef JEMALLOC_EXPERIMENTAL 147234370Sjasone#undef je_allocm 148234370Sjasone#undef je_rallocm 149234370Sjasone#undef je_sallocm 150234370Sjasone#undef je_dallocm 151234370Sjasone#undef je_nallocm 152234370Sjasone#endif 153234370Sjasone#endif 154234370Sjasone 155234370Sjasone#ifdef __cplusplus 156234370Sjasone}; 157234370Sjasone#endif 158234370Sjasone#endif /* JEMALLOC_H_ */ 159