Template Class CGenericMemoryPool

Class Documentation

template<class DATA_PARAMS, class POOLABLE_DATA>
class CGenericMemoryPool

A generic system for versatile memory pooling. This class implements the singleton pattern so a unique instance exists for each combination of template parameters. All methods are thread-safe.

Basic usage:

  • When needed, call request_memory() to check the availability of memory in the pool.

    • At your class destructor, donate the memory to the pool with dump_to_pool().

Notice that memory requests are checked against memory blocks in the pool via a user-defined function:

bool POOLABLE_DATA::isSuitable(const POOLABLE_DATA & req) const { ... }
For an example of how to handle a memory pool, see the class mrpt::obs::CObservation3DRangeScan

Template Parameters:
  • POOLABLE_DATA – A struct with user-defined objects which actually contain the memory blocks (e.g. one or more std::vector).

  • DATA_PARAMS – A struct with user information about each memory block (e.g. size of a std::vector)

Public Functions

inline size_t getMemoryPoolMaxSize() const
inline void setMemoryPoolMaxSize(size_t maxNumEntries)
inline POOLABLE_DATA *request_memory(const DATA_PARAMS &params)

Request a block of data which fulfils the size requirements stated in params. Notice that the decision on the suitability of each pool’ed block is done by DATA_PARAMS::isSuitable().

Note

It is a responsibility of the user to free with “delete” the “POOLABLE_DATA” object itself once the memory has been extracted from its elements.

Returns:

The block of data, or nullptr if none suitable was found in the pool.

inline void dump_to_pool(const DATA_PARAMS &params, POOLABLE_DATA *block)

Saves the passed data block (characterized by params) to the pool. If the overall size of the pool is above the limit, the oldest entry is removed.

Note

It is a responsibility of the user to allocate in dynamic memory the “POOLABLE_DATA” object with “new”.

inline ~CGenericMemoryPool()

Public Static Functions

static inline CGenericMemoryPool<DATA_PARAMS, POOLABLE_DATA> *getInstance(size_t max_pool_entries = 5)

Construct-on-first-use (~singleton) pattern: Return the unique instance of this class for a given template arguments, or nullptr if it was once created but it’s been destroyed (which means we’re in the program global destruction phase).