Break up headers into constituent parts
This is part of a broader change to make header files better represent the dependencies between one another (see https://github.com/jemalloc/jemalloc/issues/533). It breaks up component headers into smaller parts that can be made to have a simpler dependency graph. For the autogenerated headers (smoothstep.h and size_classes.h), no splitting was necessary, so I didn't add support to emit multiple headers.
This commit is contained in:
committed by
David Goldblatt
parent
94c5d22a4d
commit
77cccac8cd
84
include/jemalloc/internal/extent_structs.h
Normal file
84
include/jemalloc/internal/extent_structs.h
Normal file
@@ -0,0 +1,84 @@
|
||||
#ifndef JEMALLOC_INTERNAL_EXTENT_STRUCTS_H
|
||||
#define JEMALLOC_INTERNAL_EXTENT_STRUCTS_H
|
||||
|
||||
/* Extent (span of pages). Use accessor functions for e_* fields. */
|
||||
struct extent_s {
|
||||
/* Arena from which this extent came, if any. */
|
||||
arena_t *e_arena;
|
||||
|
||||
/* Pointer to the extent that this structure is responsible for. */
|
||||
void *e_addr;
|
||||
|
||||
/* Extent size. */
|
||||
size_t e_size;
|
||||
|
||||
/*
|
||||
* Usable size, typically smaller than extent size due to large_pad or
|
||||
* promotion of sampled small regions.
|
||||
*/
|
||||
size_t e_usize;
|
||||
|
||||
/*
|
||||
* Serial number (potentially non-unique).
|
||||
*
|
||||
* In principle serial numbers can wrap around on 32-bit systems if
|
||||
* JEMALLOC_MUNMAP is defined, but as long as comparison functions fall
|
||||
* back on address comparison for equal serial numbers, stable (if
|
||||
* imperfect) ordering is maintained.
|
||||
*
|
||||
* Serial numbers may not be unique even in the absence of wrap-around,
|
||||
* e.g. when splitting an extent and assigning the same serial number to
|
||||
* both resulting adjacent extents.
|
||||
*/
|
||||
size_t e_sn;
|
||||
|
||||
/* True if extent is active (in use). */
|
||||
bool e_active;
|
||||
|
||||
/*
|
||||
* The zeroed flag is used by extent recycling code to track whether
|
||||
* memory is zero-filled.
|
||||
*/
|
||||
bool e_zeroed;
|
||||
|
||||
/*
|
||||
* True if physical memory is committed to the extent, whether
|
||||
* explicitly or implicitly as on a system that overcommits and
|
||||
* satisfies physical memory needs on demand via soft page faults.
|
||||
*/
|
||||
bool e_committed;
|
||||
|
||||
/*
|
||||
* The slab flag indicates whether the extent is used for a slab of
|
||||
* small regions. This helps differentiate small size classes, and it
|
||||
* indicates whether interior pointers can be looked up via iealloc().
|
||||
*/
|
||||
bool e_slab;
|
||||
|
||||
union {
|
||||
/* Small region slab metadata. */
|
||||
arena_slab_data_t e_slab_data;
|
||||
|
||||
/* Profile counters, used for large objects. */
|
||||
union {
|
||||
void *e_prof_tctx_pun;
|
||||
prof_tctx_t *e_prof_tctx;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Linkage for arena's extents_dirty and arena_bin_t's slabs_full rings.
|
||||
*/
|
||||
qr(extent_t) qr_link;
|
||||
|
||||
union {
|
||||
/* Linkage for per size class sn/address-ordered heaps. */
|
||||
phn(extent_t) ph_link;
|
||||
|
||||
/* Linkage for arena's large and extent_cache lists. */
|
||||
ql_elm(extent_t) ql_link;
|
||||
};
|
||||
};
|
||||
typedef ph(extent_t) extent_heap_t;
|
||||
|
||||
#endif /* JEMALLOC_INTERNAL_EXTENT_STRUCTS_H */
|
Reference in New Issue
Block a user