24#include <unordered_map>
45 MPool(std::string name_,
bool leak_check_,
size_t obj_size_,
size_t alignment_,
46 size_t alignment_offset_,
size_t objs_per_chunk_ = 1024,
47 size_t init_num_objs_ = 1024,
size_t max_objs_ = UINT_MAX,
48 size_t max_chunk_size_ = UINT_MAX,
49 double expand_factor_ = 1.5,
51 void *chunk_alloc_arg_ =
nullptr,
53 void *chunk_release_arg_ =
nullptr,
obj_init_t obj_init_ =
nullptr,
54 void *obj_init_arg_ =
nullptr,
obj_cleanup_t obj_cleanup_ =
nullptr,
55 void *obj_cleanup_arg_ =
nullptr);
62 static void put(
void *obj);
64 bool has(
bool with_expand);
91 bool validate_config();
92 void free_list_add(Elem *elem);
93 void *chunk_elems(
const Chunk *chunk);
94 Elem *chunk_ith_elem(
const Chunk *chunk,
size_t i);
100 size_t alignment_offset;
101 size_t objs_per_chunk;
102 size_t init_num_objs;
104 size_t max_chunk_size;
105 double expand_factor;
107 void *chunk_alloc_arg;
109 void *chunk_release_arg;
113 void *obj_cleanup_arg;
116 size_t num_chunks{0};
117 size_t obj_alloc_size;
118 Elem *free_list{
nullptr};
119 Chunk *chunks{
nullptr};
124 VMPool(std::string name_,
bool leak_check_,
size_t max_obj_size_,
size_t alignment_,
125 size_t objs_per_chunk_ = 128,
size_t init_num_objs_ = 256,
126 size_t max_objs_ = UINT_MAX,
size_t max_chunk_size_ = UINT_MAX,
127 double expand_factor_ = 1.5,
129 void *chunk_alloc_arg_ =
nullptr,
131 void *chunk_release_arg_ =
nullptr,
obj_init_t obj_init_ =
nullptr,
132 void *obj_init_arg_ =
nullptr,
obj_cleanup_t obj_cleanup_ =
nullptr,
133 void *obj_cleanup_arg_ =
nullptr);
138 static void put(
void *buf);
144 uintptr_t parent_obj;
148 static const size_t metadata_size{
sizeof(Elem) +
alignof(Elem)};
149 uintptr_t obj_cached{0};
150 uintptr_t addr_cached{0};
152 size_t mpool_max_obj_size;
155 std::unordered_map<uintptr_t, size_t> objs_map;
MPool(std::string name_, bool leak_check_, size_t obj_size_, size_t alignment_, size_t alignment_offset_, size_t objs_per_chunk_=1024, size_t init_num_objs_=1024, size_t max_objs_=UINT_MAX, size_t max_chunk_size_=UINT_MAX, double expand_factor_=1.5, chunk_alloc_t chunk_alloc_=&MPool::malloc_wrapper, void *chunk_alloc_arg_=nullptr, chunk_release_t chunk_release_=&MPool::free_wrapper, void *chunk_release_arg_=nullptr, obj_init_t obj_init_=nullptr, void *obj_init_arg_=nullptr, obj_cleanup_t obj_cleanup_=nullptr, void *obj_cleanup_arg_=nullptr)
static void put(void *obj)
static void free_wrapper(void *chunk, void *arg)
Definition mpool.h:72
static void * malloc_wrapper(size_t size, void *arg)
Definition mpool.h:66
bool expand(size_t ext_objs)
MPool(const MPool &)=delete
MPool & operator=(const MPool &)=delete
bool has(bool with_expand)
bool expand(size_t ext_objs)
VMPool(std::string name_, bool leak_check_, size_t max_obj_size_, size_t alignment_, size_t objs_per_chunk_=128, size_t init_num_objs_=256, size_t max_objs_=UINT_MAX, size_t max_chunk_size_=UINT_MAX, double expand_factor_=1.5, chunk_alloc_t chunk_alloc_=&MPool::malloc_wrapper, void *chunk_alloc_arg_=nullptr, chunk_release_t chunk_release_=&MPool::free_wrapper, void *chunk_release_arg_=nullptr, obj_init_t obj_init_=nullptr, void *obj_init_arg_=nullptr, obj_cleanup_t obj_cleanup_=nullptr, void *obj_cleanup_arg_=nullptr)
static void put(void *buf)
void(*)(void *obj, void *arg) obj_cleanup_t
Definition mpool.h:41
void(*)(void *chunk, void *arg) chunk_release_t
Definition mpool.h:39
void *(*)(size_t bytes, void *arg) chunk_alloc_t
Definition mpool.h:38
void(*)(void *obj, void *arg) obj_init_t
Definition mpool.h:40
Definition activemsg.h:38