chunk.h revision 299587
1234370Sjasone/******************************************************************************/ 2234370Sjasone#ifdef JEMALLOC_H_TYPES 3234370Sjasone 4234370Sjasone/* 5234370Sjasone * Size and alignment of memory chunks that are allocated by the OS's virtual 6234370Sjasone * memory system. 7234370Sjasone */ 8286866Sjasone#define LG_CHUNK_DEFAULT 21 9234370Sjasone 10234370Sjasone/* Return the chunk address for allocation address a. */ 11234370Sjasone#define CHUNK_ADDR2BASE(a) \ 12234370Sjasone ((void *)((uintptr_t)(a) & ~chunksize_mask)) 13234370Sjasone 14234370Sjasone/* Return the chunk offset of address a. */ 15234370Sjasone#define CHUNK_ADDR2OFFSET(a) \ 16234370Sjasone ((size_t)((uintptr_t)(a) & chunksize_mask)) 17234370Sjasone 18234370Sjasone/* Return the smallest chunk multiple that is >= s. */ 19234370Sjasone#define CHUNK_CEILING(s) \ 20234370Sjasone (((s) + chunksize_mask) & ~chunksize_mask) 21234370Sjasone 22286866Sjasone#define CHUNK_HOOKS_INITIALIZER { \ 23286866Sjasone NULL, \ 24286866Sjasone NULL, \ 25286866Sjasone NULL, \ 26286866Sjasone NULL, \ 27286866Sjasone NULL, \ 28286866Sjasone NULL, \ 29286866Sjasone NULL \ 30286866Sjasone} 31286866Sjasone 32234370Sjasone#endif /* JEMALLOC_H_TYPES */ 33234370Sjasone/******************************************************************************/ 34234370Sjasone#ifdef JEMALLOC_H_STRUCTS 35234370Sjasone 36234370Sjasone#endif /* JEMALLOC_H_STRUCTS */ 37234370Sjasone/******************************************************************************/ 38234370Sjasone#ifdef JEMALLOC_H_EXTERNS 39234370Sjasone 40234370Sjasoneextern size_t opt_lg_chunk; 41242844Sjasoneextern const char *opt_dss; 42234370Sjasone 43286866Sjasoneextern rtree_t chunks_rtree; 44234370Sjasone 45234370Sjasoneextern size_t chunksize; 46234370Sjasoneextern size_t chunksize_mask; /* (chunksize - 1). */ 47234370Sjasoneextern size_t chunk_npages; 48234370Sjasone 49286866Sjasoneextern const chunk_hooks_t chunk_hooks_default; 50286866Sjasone 51299587Sjasonechunk_hooks_t chunk_hooks_get(tsdn_t *tsdn, arena_t *arena); 52299587Sjasonechunk_hooks_t chunk_hooks_set(tsdn_t *tsdn, arena_t *arena, 53286866Sjasone const chunk_hooks_t *chunk_hooks); 54286866Sjasone 55299587Sjasonebool chunk_register(tsdn_t *tsdn, const void *chunk, 56299587Sjasone const extent_node_t *node); 57286866Sjasonevoid chunk_deregister(const void *chunk, const extent_node_t *node); 58286866Sjasonevoid *chunk_alloc_base(size_t size); 59299587Sjasonevoid *chunk_alloc_cache(tsdn_t *tsdn, arena_t *arena, 60299587Sjasone chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment, 61299587Sjasone bool *zero, bool dalloc_node); 62299587Sjasonevoid *chunk_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, 63299587Sjasone chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment, 64299587Sjasone bool *zero, bool *commit); 65299587Sjasonevoid chunk_dalloc_cache(tsdn_t *tsdn, arena_t *arena, 66299587Sjasone chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool committed); 67299587Sjasonevoid chunk_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, 68299587Sjasone chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool zeroed, 69299587Sjasone bool committed); 70299587Sjasonebool chunk_purge_wrapper(tsdn_t *tsdn, arena_t *arena, 71299587Sjasone chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t offset, 72286866Sjasone size_t length); 73234569Sjasonebool chunk_boot(void); 74299587Sjasonevoid chunk_prefork(tsdn_t *tsdn); 75299587Sjasonevoid chunk_postfork_parent(tsdn_t *tsdn); 76299587Sjasonevoid chunk_postfork_child(tsdn_t *tsdn); 77234370Sjasone 78234370Sjasone#endif /* JEMALLOC_H_EXTERNS */ 79234370Sjasone/******************************************************************************/ 80234370Sjasone#ifdef JEMALLOC_H_INLINES 81234370Sjasone 82286866Sjasone#ifndef JEMALLOC_ENABLE_INLINE 83286866Sjasoneextent_node_t *chunk_lookup(const void *chunk, bool dependent); 84286866Sjasone#endif 85286866Sjasone 86286866Sjasone#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_CHUNK_C_)) 87286866SjasoneJEMALLOC_INLINE extent_node_t * 88286866Sjasonechunk_lookup(const void *ptr, bool dependent) 89286866Sjasone{ 90286866Sjasone 91286866Sjasone return (rtree_get(&chunks_rtree, (uintptr_t)ptr, dependent)); 92286866Sjasone} 93286866Sjasone#endif 94286866Sjasone 95234370Sjasone#endif /* JEMALLOC_H_INLINES */ 96234370Sjasone/******************************************************************************/ 97234370Sjasone 98234370Sjasone#include "jemalloc/internal/chunk_dss.h" 99234370Sjasone#include "jemalloc/internal/chunk_mmap.h" 100