7 #ifndef SLAB_ALLOCATOR_H
8 #define SLAB_ALLOCATOR_H
16 #define POWER_SMALLEST 1
17 #define POWER_LARGEST 256
18 #define SLAB_GLOBAL_PAGE_POOL 0
19 #define CHUNK_ALIGN_BYTES 8
21 #define MAX_NUMBER_OF_SLAB_CLASSES (63 + 1)
22 #define POWER_SMALLEST 1
23 #define POWER_LARGEST 256
24 #define SLAB_GLOBAL_PAGE_POOL 0
25 #define CHUNK_ALIGN_BYTES 8
27 #define MAX_NUMBER_OF_SLAB_CLASSES (63 + 1)
37 int item_size_max = 10 * 1024 * 1024;
38 bool slab_reassign =
false;
77 SlabAllocator(
void* memPool,
const size_t limit,
size_t pageSize,
size_t alignment);
78 SlabAllocator(
void* memPool,
const size_t limit,
bool opt4hashmap =
false);
87 void init(
const size_t limit,
const double factor,
const bool prealloc);
90 #define SLABS_ALLOC_NO_NEWPAGE 1
91 void* slabs_alloc(
const size_t size);
92 void* slabs_alloc_unsafe(
const size_t size);
94 void slabs_free(
void* ptr,
size_t size);
95 void slabs_free_unsafe(
void* ptr,
size_t size);
96 void* do_slabs_alloc(
const size_t size);
97 void do_slabs_free(
void* ptr,
const size_t size);
98 void do_slabs_free(
void* ptr,
const size_t size,
unsigned int id);
99 unsigned int slabs_clsid(
const size_t size);
100 int do_slabs_newslab(
const unsigned int id);
101 void* get_page_from_global_pool(
void);
102 int grow_slab_list(
const unsigned int id);
103 void* memory_allocate(
size_t size);
104 void slabs_preallocate(
const unsigned int maxslabs);
105 void split_slab_page_into_freelist(
char* ptr,
const unsigned int id);
108 size_t mem_limit = 0;
109 size_t mem_malloced = 0;
110 bool mem_limit_reached =
false;
112 void* mem_base = NULL;
113 void* mem_current = NULL;
114 size_t mem_avail = 0;
118 bool opt4hashmap =
false;
119 bool opt4sharedmem =
false;
120 bool useExternalMemory =
false;
pthread_mutex_t slabs_lock
shared_ptr< SlabAllocator > SlabAllocatorPtr
#define MAX_NUMBER_OF_SLAB_CLASSES