|
| ConcurrentPoolAllocator (bslma::Allocator *basicAllocator=0) |
|
| ConcurrentPoolAllocator (bsls::BlockGrowth::Strategy growthStrategy, bslma::Allocator *basicAllocator=0) |
|
| ConcurrentPoolAllocator (bsls::BlockGrowth::Strategy growthStrategy, int maxBlocksPerChunk, bslma::Allocator *basicAllocator=0) |
|
| ConcurrentPoolAllocator (size_type blockSize, bslma::Allocator *basicAllocator=0) |
|
| ConcurrentPoolAllocator (size_type blockSize, bsls::BlockGrowth::Strategy growthStrategy, bslma::Allocator *basicAllocator=0) |
|
| ConcurrentPoolAllocator (size_type blockSize, bsls::BlockGrowth::Strategy growthStrategy, int maxBlocksPerChunk, bslma::Allocator *basicAllocator=0) |
|
| ~ConcurrentPoolAllocator () BSLS_KEYWORD_OVERRIDE |
| Destroy this pool allocator.
|
|
void * | allocate (size_type size) BSLS_KEYWORD_OVERRIDE |
|
void | deallocate (void *address) BSLS_KEYWORD_OVERRIDE |
|
void | release () |
|
void | reserveCapacity (int numObjects) |
|
size_type | blockSize () const |
|
| ~Allocator () BSLS_KEYWORD_OVERRIDE |
|
template<class TYPE > |
void | deleteObject (const TYPE *object) |
|
template<class TYPE > |
void | deleteObjectRaw (const TYPE *object) |
|
void | deleteObject (bsl::nullptr_t) |
|
void | deleteObjectRaw (bsl::nullptr_t) |
|
| memory_resource () BSLS_KEYWORD_DEFAULT |
| Create this object. Has no effect other than to begin its lifetime.
|
|
| memory_resource (const memory_resource &) BSLS_KEYWORD_DEFAULT |
|
virtual | ~memory_resource () |
| Destroy this object. Has no effect other than to end its lifetime.
|
|
memory_resource & | operator= (const memory_resource &) BSLS_KEYWORD_DEFAULT |
| Return a modifiable reference to this object.
|
|
BSLS_ANNOTATION_NODISCARD void * | allocate (size_t bytes, size_t alignment=k_MAX_ALIGN) |
|
void | deallocate (void *p, size_t bytes, size_t alignment=k_MAX_ALIGN) |
|
bool | is_equal (const memory_resource &other) const BSLS_KEYWORD_NOEXCEPT |
|
This class implements the bslma::Allocator
protocol to provide an allocator that manages pooled memory blocks of some uniform size, specified either at construction, or at the first invocation of the allocate
method. This allocator maintains an internal linked list of free memory blocks, and dispenses one block for each allocate
method invocation. When a memory block is deallocated, it is returned to the free list for potential reuse.
This class guarantees thread-safety while allocating or releasing memory.
See bdlma_concurrentpoolallocator
Create a pool allocator that returns blocks of contiguous memory of uniform size for each allocate
method invocation, where the size is determined by the first invocation of allocate
. Optionally specify a growthStrategy
used to control the growth of internal memory chunks (from which memory blocks are dispensed). If growthStrategy
is not specified, geometric growth is used. If growthStrategy
is specified, optionally specify a maxBlocksPerChunk
, indicating the maximum number of blocks to be allocated at once when the underlying pool must be replenished. If maxBlocksPerChunk
is not specified, an implementation-defined value is used. If geometric growth is used, the chunk size grows starting at the value returned by blockSize
, doubling in size until the size is exactly blockSize() * maxBlocksPerChunk
. If constant growth is used, the chunk size is always maxBlocksPerChunk
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used. The behavior is undefined unless 1 <= maxBlocksPerChunk
.
Create a pool allocator that returns blocks of contiguous memory of the specified blockSize
(in bytes) for each allocate
method invocation. Optionally specify a growthStrategy
used to control the growth of internal memory chunks (from which memory blocks are dispensed). If growthStrategy
is not specified, geometric growth is used. If blockSize
and growthStrategy
are specified, optionally specify a maxBlocksPerChunk
, indicating the maximum number of blocks to be allocated at once when the underlying pool must be replenished. If maxBlocksPerChunk
is not specified, an implementation-defined value is used. If geometric growth is used, the chunk size grows starting at blockSize
, doubling in size until the size is exactly blockSize * maxBlocksPerChunk
. If constant growth is used, the chunk size is always maxBlocksPerChunk
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used. The behavior is undefined unless 1 <= maxBlocksPerChunk
.
void * bdlma::ConcurrentPoolAllocator::allocate |
( |
size_type |
size | ) |
|
|
virtual |
Return a newly allocated block of memory of (at least) the specified positive size
(in bytes), and having alignment conforming to the platform requirement for any object having size
bytes. If size
is 0, a null pointer is returned with no effect. If the block size is not supplied at construction, then the size
specified in the first call to this method fixes the block size. If size
is greater than the value returned by blockSize
, the allocation request will be satisfied directly by the external allocator supplied at construction (or the default allocator, if no allocator was supplied).
Implements bslma::Allocator.