#ifndef JEMALLOC_INTERNAL_BASE_STRUCTS_H #define JEMALLOC_INTERNAL_BASE_STRUCTS_H #include "jemalloc/internal/ehooks.h" #include "jemalloc/internal/edata.h" #include "jemalloc/internal/jemalloc_internal_types.h" #include "jemalloc/internal/mutex.h" #include "jemalloc/internal/sc.h" /* Embedded at the beginning of every block of base-managed virtual memory. */ struct base_block_s { /* Total size of block's virtual memory mapping. */ size_t size; /* Next block in list of base's blocks. */ base_block_t *next; /* Tracks unused trailing space. */ edata_t edata; }; struct base_s { /* Associated arena's index within the arenas array. */ unsigned ind; /* * User-configurable extent hook functions. */ ehooks_t ehooks; /* Protects base_alloc() and base_stats_get() operations. */ malloc_mutex_t mtx; /* Using THP when true (metadata_thp auto mode). */ bool auto_thp_switched; /* * Most recent size class in the series of increasingly large base * extents. Logarithmic spacing between subsequent allocations ensures * that the total number of distinct mappings remains small. */ pszind_t pind_last; /* Serial number generation state. */ size_t extent_sn_next; /* Chain of all blocks associated with base. */ base_block_t *blocks; /* Heap of extents that track unused trailing space within blocks. */ edata_heap_t avail[SC_NSIZES]; /* Stats, only maintained if config_stats. */ size_t allocated; size_t resident; size_t mapped; /* Number of THP regions touched. */ size_t n_thp; }; #endif /* JEMALLOC_INTERNAL_BASE_STRUCTS_H */