1e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/******************************************************************************/ 2e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#ifdef JEMALLOC_H_TYPES 3e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 4e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/* 5e476f8a161d445211fd6e54fe370275196e66bcbJason Evans * Size and alignment of memory chunks that are allocated by the OS's virtual 6e476f8a161d445211fd6e54fe370275196e66bcbJason Evans * memory system. 7e476f8a161d445211fd6e54fe370275196e66bcbJason Evans */ 8e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#define LG_CHUNK_DEFAULT 22 9e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 10e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/* Return the chunk address for allocation address a. */ 11e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#define CHUNK_ADDR2BASE(a) \ 12e476f8a161d445211fd6e54fe370275196e66bcbJason Evans ((void *)((uintptr_t)(a) & ~chunksize_mask)) 13e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 14e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/* Return the chunk offset of address a. */ 15e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#define CHUNK_ADDR2OFFSET(a) \ 16e476f8a161d445211fd6e54fe370275196e66bcbJason Evans ((size_t)((uintptr_t)(a) & chunksize_mask)) 17e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 18e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/* Return the smallest chunk multiple that is >= s. */ 19e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#define CHUNK_CEILING(s) \ 20e476f8a161d445211fd6e54fe370275196e66bcbJason Evans (((s) + chunksize_mask) & ~chunksize_mask) 21e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 22e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#endif /* JEMALLOC_H_TYPES */ 23e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/******************************************************************************/ 24e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#ifdef JEMALLOC_H_STRUCTS 25e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 26e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#endif /* JEMALLOC_H_STRUCTS */ 27e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/******************************************************************************/ 28e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#ifdef JEMALLOC_H_EXTERNS 29e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 304201af05425b69ee37ffca437aca0cdd604d1e51Jason Evansextern size_t opt_lg_chunk; 31609ae595f0358157b19311b0f9f9591db7cee705Jason Evansextern const char *opt_dss; 324201af05425b69ee37ffca437aca0cdd604d1e51Jason Evans 333c2343518c2b1fbbd66065c75a3c19f908de1d78Jason Evans/* Protects stats_chunks; currently not used for any other purpose. */ 343c2343518c2b1fbbd66065c75a3c19f908de1d78Jason Evansextern malloc_mutex_t chunks_mtx; 35e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/* Chunk statistics. */ 36e476f8a161d445211fd6e54fe370275196e66bcbJason Evansextern chunk_stats_t stats_chunks; 37e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 382dbecf1f6267fae7a161b9c39cfd4d04ce168a29Jason Evansextern rtree_t *chunks_rtree; 392dbecf1f6267fae7a161b9c39cfd4d04ce168a29Jason Evans 40e476f8a161d445211fd6e54fe370275196e66bcbJason Evansextern size_t chunksize; 41e476f8a161d445211fd6e54fe370275196e66bcbJason Evansextern size_t chunksize_mask; /* (chunksize - 1). */ 42e476f8a161d445211fd6e54fe370275196e66bcbJason Evansextern size_t chunk_npages; 437393f44ff025ca67716fc53b68003fd65122fd97Jason Evansextern size_t map_bias; /* Number of arena chunk header pages. */ 44e476f8a161d445211fd6e54fe370275196e66bcbJason Evansextern size_t arena_maxclass; /* Max size class for arenas. */ 45e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 4612141150fdbda57651a53ae2fe0edaea4891d814Jason Evansvoid *chunk_alloc_base(size_t size); 4712141150fdbda57651a53ae2fe0edaea4891d814Jason Evansvoid *chunk_alloc_arena(chunk_alloc_t *chunk_alloc, 4812141150fdbda57651a53ae2fe0edaea4891d814Jason Evans chunk_dalloc_t *chunk_dalloc, unsigned arena_ind, size_t size, 4912141150fdbda57651a53ae2fe0edaea4891d814Jason Evans size_t alignment, bool *zero); 5059113bcc94b9fc7549611afb99ca99cad1a7f196aravindvoid *chunk_alloc_default(size_t size, size_t alignment, bool *zero, 5159113bcc94b9fc7549611afb99ca99cad1a7f196aravind unsigned arena_ind); 52609ae595f0358157b19311b0f9f9591db7cee705Jason Evansvoid chunk_unmap(void *chunk, size_t size); 5312141150fdbda57651a53ae2fe0edaea4891d814Jason Evansbool chunk_dalloc_default(void *chunk, size_t size, unsigned arena_ind); 54a8f8d7540d66ddee7337db80c92890916e1063caJason Evansbool chunk_boot(void); 5520f1fc95adb35ea63dc61f47f2b0ffbd37d39f32Jason Evansvoid chunk_prefork(void); 5620f1fc95adb35ea63dc61f47f2b0ffbd37d39f32Jason Evansvoid chunk_postfork_parent(void); 5720f1fc95adb35ea63dc61f47f2b0ffbd37d39f32Jason Evansvoid chunk_postfork_child(void); 58e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 59e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#endif /* JEMALLOC_H_EXTERNS */ 60e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/******************************************************************************/ 61e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#ifdef JEMALLOC_H_INLINES 62e476f8a161d445211fd6e54fe370275196e66bcbJason Evans 63e476f8a161d445211fd6e54fe370275196e66bcbJason Evans#endif /* JEMALLOC_H_INLINES */ 64e476f8a161d445211fd6e54fe370275196e66bcbJason Evans/******************************************************************************/ 654201af05425b69ee37ffca437aca0cdd604d1e51Jason Evans 66376b1529a383c39adf4674baf6db83a5e63f97acJason Evans#include "jemalloc/internal/chunk_dss.h" 67376b1529a383c39adf4674baf6db83a5e63f97acJason Evans#include "jemalloc/internal/chunk_mmap.h" 68