#include <PoolChunked.h>

Inheritance diagram for MemPoolChunked:
Collaboration diagram for MemPoolChunked:

Public Member Functions

 MemPoolChunked (const char *label, size_t obj_size)
 ~MemPoolChunked () override
void convertFreeCacheToChunkFreeCache ()
void createChunk ()
void * get ()
void push (void *obj)
size_t getStats (Mem::PoolStats &) override
void setChunkSize (size_t) override
bool idleTrigger (int) const override
void clean (time_t) override
void * alloc ()
 provide (and reserve) memory suitable for storing one object More...
void freeOne (void *obj)
 return memory reserved by alloc() More...
int getInUseCount () const
 the difference between the number of alloc() and freeOne() calls More...
void zeroBlocks (const bool doIt)
void flushCounters ()

Static Public Member Functions

static size_t RoundedSize (const size_t minSize)

Public Attributes

size_t chunk_size
int chunk_capacity
int chunkCount
void * freeCache
Splay< MemChunk * > allChunks
size_t countAlloc = 0
 the number of calls to Mem::Allocator::alloc() since last flush More...
size_t countSavedAllocs = 0
 the number of malloc()/calloc() calls avoided since last flush More...
size_t countFreeOne = 0
 the number of calls to Mem::Allocator::freeOne() since last flush More...
const char *const label
 brief description of objects returned by alloc() More...
const size_t objectSize
 the size (in bytes) of objects managed by this allocator More...
PoolMeter meter
 statistics tracked for this allocator More...

Static Public Attributes

static const size_t FlushLimit = 1000
 Flush counters to 'meter' after flush limit allocations. More...

Protected Member Functions

void * allocate () override
 *alloc() More...
void deallocate (void *) override
 freeOne(void *) More...

Protected Attributes

bool doZero = true


class MemChunk

Detailed Description

Definition at line 21 of file PoolChunked.h.

Constructor & Destructor Documentation

◆ MemPoolChunked()

MemPoolChunked::MemPoolChunked ( const char *  label,
size_t  obj_size 

Definition at line 141 of file PoolChunked.cc.

References M_MMAP_MAX, MEM_CHUNK_SIZE, MEM_MAX_MMAP_CHUNKS, and setChunkSize().

Referenced by getStats().

◆ ~MemPoolChunked()

MemPoolChunked::~MemPoolChunked ( )

Member Function Documentation

◆ alloc()

◆ allocate()

void * MemPoolChunked::allocate ( )

◆ clean()

◆ convertFreeCacheToChunkFreeCache()

◆ createChunk()

void MemPoolChunked::createChunk ( )

Definition at line 226 of file PoolChunked.cc.

References Chunks, MemChunk, MemChunk::next, and MemChunk::objCache.

Referenced by get().

◆ deallocate()

void MemPoolChunked::deallocate ( void *  )

◆ flushCounters()

void Mem::Allocator::flushCounters ( )

◆ freeOne()

◆ get()

◆ getInUseCount()

◆ getStats()

size_t MemPoolChunked::getStats ( Mem::PoolStats )

◆ idleTrigger()

bool MemPoolChunked::idleTrigger ( int  shift) const

◆ push()

void MemPoolChunked::push ( void *  obj)

◆ RoundedSize()

static size_t Mem::Allocator::RoundedSize ( const size_t  minSize)
minSizeMinimum size needed to be allocated.
Return values
nSmallest size divisible by sizeof(void*)

Definition at line 89 of file Allocator.h.

Referenced by GetStrPool().

◆ setChunkSize()

void MemPoolChunked::setChunkSize ( size_t  chunksize)

Allows you tune chunk size of pooling. Objects are allocated in chunks instead of individually. This conserves memory, reduces fragmentation. Because of that memory can be freed also only in chunks. Therefore there is tradeoff between memory conservation due to chunking and free memory fragmentation.

As a general guideline, increase chunk size only for pools that keep very many items for relatively long time.

Reimplemented from Mem::Allocator.

Definition at line 267 of file PoolChunked.cc.

References chunk_capacity, chunk_size, Chunks, MEM_CHUNK_MAX_SIZE, MEM_MAX_FREE, MEM_MIN_FREE, MEM_PAGE_SIZE, and Mem::Allocator::objectSize.

Referenced by MemPoolChunked().

◆ zeroBlocks()

void Mem::Allocator::zeroBlocks ( const bool  doIt)
See also

Definition at line 58 of file Allocator.h.

References Mem::Allocator::doZero.

Referenced by Mem::AllocatorProxy::getAllocator(), GetStrPool(), and memDataInit().

Friends And Related Function Documentation

◆ MemChunk

friend class MemChunk

Definition at line 24 of file PoolChunked.h.

Referenced by createChunk().

Member Data Documentation

◆ allChunks

Splay<MemChunk *> MemPoolChunked::allChunks

◆ chunk_capacity

int MemPoolChunked::chunk_capacity

◆ chunk_size

size_t MemPoolChunked::chunk_size

Definition at line 44 of file PoolChunked.h.

Referenced by MemChunk::MemChunk(), memCompObjChunks(), and setChunkSize().

◆ chunkCount

int MemPoolChunked::chunkCount

Definition at line 46 of file PoolChunked.h.

Referenced by MemChunk::MemChunk(), MemChunk::~MemChunk(), and getStats().

◆ Chunks

MemChunk* MemPoolChunked::Chunks

Definition at line 49 of file PoolChunked.h.

Referenced by ~MemPoolChunked(), clean(), createChunk(), getStats(), and setChunkSize().

◆ countAlloc

size_t Mem::Allocator::countAlloc = 0

Definition at line 94 of file Allocator.h.

Referenced by Mem::Allocator::alloc(), and Mem::Allocator::flushCounters().

◆ countFreeOne

size_t Mem::Allocator::countFreeOne = 0

Definition at line 100 of file Allocator.h.

Referenced by Mem::Allocator::flushCounters(), and Mem::Allocator::freeOne().

◆ countSavedAllocs

size_t Mem::Allocator::countSavedAllocs = 0

Definition at line 97 of file Allocator.h.

Referenced by MemPoolMalloc::allocate(), Mem::Allocator::flushCounters(), and get().

◆ doZero

bool Mem::Allocator::doZero = true

Whether to zero memory on initial allocation and on return to the pool.

We do this on some pools because many object constructors are/were incomplete and we are afraid some code may use the object after free. When possible, set this to false to avoid zeroing overheads.

Definition at line 126 of file Allocator.h.

Referenced by MemChunk::MemChunk(), MemPoolMalloc::allocate(), MemPoolMalloc::deallocate(), push(), and Mem::Allocator::zeroBlocks().

◆ FlushLimit

const size_t Mem::Allocator::FlushLimit = 1000

Definition at line 25 of file Allocator.h.

Referenced by Mem::Allocator::alloc().

◆ freeCache

void* MemPoolChunked::freeCache

Definition at line 47 of file PoolChunked.h.

Referenced by convertFreeCacheToChunkFreeCache(), get(), and push().

◆ label

const char* const Mem::Allocator::label

Definition at line 105 of file Allocator.h.

Referenced by getStats(), and MemPoolMalloc::getStats().

◆ meter

◆ nextFreeChunk

MemChunk* MemPoolChunked::nextFreeChunk

Definition at line 48 of file PoolChunked.h.

Referenced by MemChunk::MemChunk(), clean(), and get().

◆ objectSize

The documentation for this class was generated from the following files:






Web Site Translations