dune-common  2.9.0
Classes | Public Types | Public Member Functions | Static Public Attributes | List of all members
Dune::Pool< T, s > Class Template Reference

A memory pool of objects. More...

#include <dune/common/poolallocator.hh>

Inheritance diagram for Dune::Pool< T, s >:
Inheritance graph

Public Types

typedef T MemberType
 The type of object we allocate memory for. More...
 

Public Member Functions

 Pool ()
 Constructor. More...
 
 ~Pool ()
 Destructor. More...
 
void * allocate ()
 Get a new or recycled object. More...
 
void free (void *o)
 Free an object. More...
 
void print (std::ostream &os)
 Print elements in pool for debugging. More...
 

Static Public Attributes

constexpr static int unionSize
 The size of a union of Reference and MemberType. More...
 
constexpr static int size
 Size requirement. At least one object has to stored. More...
 
constexpr static int alignment = std::lcm(alignof(MemberType), alignof(Reference))
 The alignment that suits both the MemberType and the Reference (i.e. their least common multiple). More...
 
constexpr static int alignedSize
 The aligned size of the type. More...
 
constexpr static int chunkSize
 The size of each chunk memory chunk. More...
 
constexpr static int elements = (chunkSize / alignedSize)
 The number of element each chunk can hold. More...
 

Detailed Description

template<class T, std::size_t s>
class Dune::Pool< T, s >

A memory pool of objects.

The memory for the objects is organized in chunks. Each chunks is capable of holding a specified number of objects. The allocated objects will be properly aligned for fast access. Deallocated objects are cached for reuse to prevent memory fragmentation.

Warning
If the size of the objects allocated is less than the size of a pointer memory is wasted.
Due to aligned issues at the number of bytes of the alignment prerequisite (< 4 bytes) are wasted. This effect becomes negligible for big sizes of chunkSize.
Template Parameters
TThe type that is allocated by us.
sThe size of a memory chunk in bytes.

Member Typedef Documentation

◆ MemberType

template<class T , std::size_t s>
typedef T Dune::Pool< T, s >::MemberType

The type of object we allocate memory for.

Member Data Documentation

◆ alignedSize

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::alignedSize
staticconstexpr
Initial value:
= (unionSize % alignment == 0) ?
constexpr static int unionSize
The size of a union of Reference and MemberType.
Definition: poolallocator.hh:113
constexpr static int alignment
The alignment that suits both the MemberType and the Reference (i.e. their least common multiple).
Definition: poolallocator.hh:127

The aligned size of the type.

This size is bigger than sizeof of the type and a multiple of the alignment requirement.

◆ alignment

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::alignment = std::lcm(alignof(MemberType), alignof(Reference))
staticconstexpr

The alignment that suits both the MemberType and the Reference (i.e. their least common multiple).

◆ chunkSize

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::chunkSize
staticconstexpr
Initial value:
= (size % alignment == 0) ?
constexpr static int size
Size requirement. At least one object has to stored.
Definition: poolallocator.hh:120

The size of each chunk memory chunk.

Will be adapted to be a multiple of the alignment

◆ elements

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::elements = (chunkSize / alignedSize)
staticconstexpr

The number of element each chunk can hold.

◆ size

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::size
staticconstexpr
Initial value:
= (sizeof(MemberType) <= s && sizeof(Reference) <= s) ?
T MemberType
The type of object we allocate memory for.
Definition: poolallocator.hh:108

Size requirement. At least one object has to stored.

◆ unionSize

template<class T , std::size_t s>
constexpr static int Dune::Pool< T, s >::unionSize
staticconstexpr
Initial value:
= (sizeof(MemberType) < sizeof(Reference)) ?
sizeof(Reference) : sizeof(MemberType)

The size of a union of Reference and MemberType.


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