Class DynamicPoolMap¶
Defined in File DynamicPoolMap.hpp
Inheritance Relationships¶
Base Types¶
public umpire::strategy::AllocationStrategy
(Class AllocationStrategy)private umpire::strategy::mixins::AlignedAllocation
(Class AlignedAllocation)
Class Documentation¶
-
class
umpire::strategy
::
DynamicPoolMap
: public umpire::strategy::AllocationStrategy, private umpire::strategy::mixins::AlignedAllocation¶ Simple dynamic pool for allocations.
This AllocationStrategy uses Simpool to provide pooling for allocations of any size. The behavior of the pool can be controlled by two parameters: the initial allocation size, and the minimum allocation size.
The initial size controls how large the first piece of memory allocated is, and the minimum size controls the lower bound on all future chunk allocations.
Public Types
-
using
Pointer
= void*¶
-
using
CoalesceHeuristic
= std::function<bool(const strategy::DynamicPoolMap&)>¶
Public Functions
-
DynamicPoolMap
(const std::string &name, int id, Allocator allocator, const std::size_t first_minimum_pool_allocation_size = (512 * 1024 * 1024), const std::size_t min_alloc_size = (1 * 1024 * 1024), const std::size_t align_bytes = 16, CoalesceHeuristic should_coalesce = percent_releasable(100)) noexcept¶ Construct a new DynamicPoolMap.
- Parameters
name
: Name of this instance of the DynamicPoolMapid
: Unique identifier for this instanceallocator
: Allocation resource that pool usesfirst_minimum_pool_allocation_size
: Size the pool initially allocatesnext_minimum_pool_allocation_size
: The minimum size of all future allocationsalign_bytes
: Number of bytes with which to align allocation sizes (power-of-2)should_coalesce
: Heuristic for when to perform coalesce operation
-
~DynamicPoolMap
()¶
-
DynamicPoolMap
(const DynamicPoolMap&) = delete¶
-
void *
allocate
(std::size_t bytes) override¶ Allocate bytes of memory.
- Return
Pointer to start of allocated bytes.
- Parameters
bytes
: Number of bytes to allocate.
-
void
deallocate
(void *ptr) override¶ Free the memory at ptr.
- Parameters
ptr
: Pointer to free.
-
void
release
() override¶ Release any and all unused memory held by this AllocationStrategy.
-
std::size_t
getActualSize
() const noexcept override¶ Get the current amount of memory allocated by this allocator.
Note that this can be larger than getCurrentSize(), particularly if the AllocationStrategy implements some kind of pooling.
- Return
The total size of all the memory this object has allocated.
-
std::size_t
getCurrentSize
() const noexcept override¶ Get current (total) size of the allocated memory.
This is the total size of all allocation currently ‘live’ that have been made by this AllocationStrategy object.
- Return
Current total size of allocations.
-
Platform
getPlatform
() noexcept override¶ Get the platform associated with this AllocationStrategy.
The Platform distinguishes the appropriate place to execute operations on memory allocated by this AllocationStrategy.
- Return
The platform associated with this AllocationStrategy.
-
MemoryResourceTraits
getTraits
() const noexcept override¶
-
std::size_t
getReleasableSize
() const noexcept¶ Returns the number of bytes of unallocated data held by this pool that could be immediately released back to the resource.
A memory pool has a set of blocks that are not leased out to the application as allocations. Allocations from the resource begin as a single chunk, but these could be split, and only the first chunk can be deallocated back to the resource immediately.
- Return
The total number of bytes that are immediately releasable.
-
std::size_t
getFreeBlocks
() const noexcept¶ Return the number of free memory blocks that the pools holds.
-
std::size_t
getInUseBlocks
() const noexcept¶ Return the number of used memory blocks that the pools holds.
-
std::size_t
getBlocksInPool
() const noexcept¶ Return the number of memory blocks both leased to application and internal free memory that the pool holds.
-
std::size_t
getLargestAvailableBlock
() noexcept¶ Get the largest allocatable number of bytes from pool before the pool will grow.
return The largest number of bytes that may be allocated without causing pool growth
-
void
coalesce
()¶ Merge as many free records as possible, release all possible free blocks, then reallocate a chunk to keep the actual size the same.
-
std::size_t
getHighWatermark
() const noexcept¶ Get the high watermark of the total allocated size.
This is equivalent to the highest observed value of getCurrentSize.
- Return
High watermark allocation size.
-
std::size_t
getAllocationCount
() const noexcept¶ Get the total number of active allocations by this allocator.
- Return
The total number of active allocations this object has allocated.
-
const std::string &
getName
() noexcept¶ Get the name of this AllocationStrategy.
- Return
The name of this AllocationStrategy.
-
int
getId
() noexcept¶ Get the id of this AllocationStrategy.
- Return
The id of this AllocationStrategy.
Public Static Functions
-
CoalesceHeuristic
percent_releasable
(int percentage)¶
Private Functions
-
std::size_t
aligned_round_up
(std::size_t size)¶ Round up the size to be an integral multple of configured alignment.
- Return
Size rounded up to be integral multiple of configured alignment
-
void *
aligned_allocate
(const std::size_t size)¶ Return an allocation of
size
bytes that is aligned on the configured alignment boundary.
-
void
aligned_deallocate
(void *ptr)¶ Deallocate previously alligned allocation.
Private Members
-
strategy::AllocationStrategy *
m_allocator
¶
-
using