#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 relabel (const char *const aLabel)
 
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
 
MemChunknextFreeChunk
 
MemChunkChunks
 
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 * 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
 

Friends

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 ( )
override

Member Function Documentation

◆ alloc()

◆ allocate()

void * MemPoolChunked::allocate ( )
overrideprotectedvirtual

◆ 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 *  )
overrideprotectedvirtual

◆ flushCounters()

void Mem::Allocator::flushCounters ( )
inlineinherited

◆ freeOne()

◆ get()

◆ getInUseCount()

◆ getStats()

size_t MemPoolChunked::getStats ( Mem::PoolStats )
overridevirtual

◆ idleTrigger()

bool MemPoolChunked::idleTrigger ( int  shift) const
overridevirtual

◆ push()

void MemPoolChunked::push ( void *  obj)

◆ relabel()

void Mem::Allocator::relabel ( const char *const  aLabel)
inlineinherited

change the allocator description if we were only able to provide an approximate description at object construction time

Definition at line 34 of file Allocator.h.

References Mem::Allocator::label.

◆ RoundedSize()

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

Definition at line 93 of file Allocator.h.

Referenced by GetStrPool().

◆ setChunkSize()

void MemPoolChunked::setChunkSize ( size_t  chunksize)
overridevirtual

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.

Note
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)
inlineinherited
See also
doZero

Definition at line 62 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
friend

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
inherited

Definition at line 98 of file Allocator.h.

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

◆ countFreeOne

size_t Mem::Allocator::countFreeOne = 0
inherited

Definition at line 104 of file Allocator.h.

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

◆ countSavedAllocs

size_t Mem::Allocator::countSavedAllocs = 0
inherited

Definition at line 101 of file Allocator.h.

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

◆ doZero

bool Mem::Allocator::doZero = true
protectedinherited

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 130 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
staticinherited

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* Mem::Allocator::label
inherited

Definition at line 109 of file Allocator.h.

Referenced by getStats(), MemPoolMalloc::getStats(), and Mem::Allocator::relabel().

◆ 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:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors