Home | History | Annotate | Line # | Download | only in internal
      1 #ifndef JEMALLOC_INTERNAL_BIN_INFO_H
      2 #define JEMALLOC_INTERNAL_BIN_INFO_H
      3 
      4 #include "jemalloc/internal/bitmap.h"
      5 
      6 /*
      7  * Read-only information associated with each element of arena_t's bins array
      8  * is stored separately, partly to reduce memory usage (only one copy, rather
      9  * than one per arena), but mainly to avoid false cacheline sharing.
     10  *
     11  * Each slab has the following layout:
     12  *
     13  *   /--------------------\
     14  *   | region 0           |
     15  *   |--------------------|
     16  *   | region 1           |
     17  *   |--------------------|
     18  *   | ...                |
     19  *   | ...                |
     20  *   | ...                |
     21  *   |--------------------|
     22  *   | region nregs-1     |
     23  *   \--------------------/
     24  */
     25 typedef struct bin_info_s bin_info_t;
     26 struct bin_info_s {
     27 	/* Size of regions in a slab for this bin's size class. */
     28 	size_t			reg_size;
     29 
     30 	/* Total size of a slab for this bin's size class. */
     31 	size_t			slab_size;
     32 
     33 	/* Total number of regions in a slab for this bin's size class. */
     34 	uint32_t		nregs;
     35 
     36 	/* Number of sharded bins in each arena for this size class. */
     37 	uint32_t		n_shards;
     38 
     39 	/*
     40 	 * Metadata used to manipulate bitmaps for slabs associated with this
     41 	 * bin.
     42 	 */
     43 	bitmap_info_t		bitmap_info;
     44 };
     45 
     46 extern bin_info_t bin_infos[SC_NBINS];
     47 
     48 void bin_info_boot(sc_data_t *sc_data, unsigned bin_shard_sizes[SC_NBINS]);
     49 
     50 #endif /* JEMALLOC_INTERNAL_BIN_INFO_H */
     51