23 #include <sys/types.h>
34 #ifndef USE_MEMCACHED_SLAB_ALLOCATOR
42 std::cout <<
"Fatal error: initialize shared memory failed with size=" << memSize
44 logger->error(std::string(
"Fatal error: initialize shared memory failed with size=") +
45 std::to_string(memSize));
48 #ifdef USE_MEMCACHED_SLAB_ALLOCATOR
63 pthread_mutex_lock(this->
memLock);
67 pthread_mutex_unlock(this->
memLock);
78 #ifdef USE_MEMCACHED_SLAB_ALLOCATOR
79 ptr = this->
allocator->slabs_alloc_unsafe(size);
89 void* ptr = this->
malloc(size + alignment);
94 offset = (
char*)retPtr - (
char*)ptr;
102 #ifdef USE_MEMCACHED_SLAB_ALLOCATOR
103 this->
allocator->slabs_free_unsafe(ptr, size);
112 size_t roundToMask = (~((size_t)roundTo - 1));
113 return (
char*)((size_t)((address) + (roundTo - 1)) & roundToMask);
117 size_t roundToMask = (~((size_t)roundTo - 1));
118 return (((address) + (roundTo - 1)) & roundToMask);
122 size_t roundToMask = (~((size_t)roundTo - 1));
123 return ((address)&roundToMask);
133 pthread_mutex_destroy(this->
memLock);
145 this->
memPool = mmap(0, this->
shmMemSize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
146 if (this->
memPool == (
void*)-1) {
153 return (
long long)((
char*)shmAddress - (
char*)this->
memPool);
157 return (
void*)((size_t)this->
memPool + (
size_t)offset);
163 std::cout <<
"FATAL ERROR: can't allocate for memLock from buffer pool" << std::endl;
166 if (pthread_mutex_init(this->
memLock,
nullptr) != 0) {
173 #ifdef USE_MEMCACHED_SLAB_ALLOCATOR
174 return this->
allocator->slabs_alloc_unsafe(size);
181 #ifdef USE_MEMCACHED_SLAB_ALLOCATOR
182 return this->
allocator->slabs_free_unsafe(ptr, size);
void free(void *ptr, size_t size)
void _free_unsafe(void *ptr, size_t size)
void * getPointer(size_t offset)
static char * addressRoundUp(char *address, size_t roundTo)
void tlsf_free(tlsf_t tlsf, void *ptr)
static size_t roundDown(size_t size, size_t roundTo)
void * _malloc_unsafe(size_t size)
static size_t roundUp(size_t size, size_t roundTo)
void * malloc(size_t size)
tlsf_t tlsf_create_with_pool(void *mem, size_t bytes)
SharedMem(size_t shmMemSize, pdb::PDBLoggerPtr logger)
std::shared_ptr< PDBLogger > PDBLoggerPtr
void * mallocAlign(size_t size, size_t alignment, int &offset)
long long computeOffset(void *shmAddress)
#define DEFAULT_PAGE_SIZE
void * tlsf_malloc(tlsf_t tlsf, size_t bytes)
pthread_mutex_t * memLock