[#BloombergLP-bdlma-ConcurrentMultipoolAllocator]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlma.adoc[bdlma]::ConcurrentMultipoolAllocator
:relfileprefix: ../../
:mrdocs:

Thread&hyphen;safe allocator managing pools of varying block sizes&period;

== Synopsis

Declared in `&lt;bdlma&lowbar;concurrentmultipoolallocator&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class ConcurrentMultipoolAllocator
    : public xref:BloombergLP/bdlma/ManagedAllocator.adoc[bdlma::ManagedAllocator]
----

== Description

This class implements the `bdlma&colon;&colon;ManagedAllocator` protocol to provide a thread&hyphen;safe allocator that maintains a configurable number of `Pool` objects, each dispensing memory blocks of a unique size&period; The `Pool` objects are placed in an array, with each successive pool managing memory blocks of size twice that of the previous pool&period; Each multipool allocation (deallocation) request allocates memory from (returns memory to) the internal pool having the smallest block size not less than the requested size, or, if no pool manages memory blocks of sufficient sized, from a separately managed list of memory blocks&period; Both the `release` method and the destructor of a `ConcurrentMultipoolAllocator` release all memory currently allocated via the object&period;

== Base Classes

[cols="1,4"]
|===
| Name| Description
| `xref:BloombergLP/bdlma/ManagedAllocator.adoc[bdlma::ManagedAllocator]`
| Protocol for allocators that support releasing all allocated memory&period;
|===

== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslma/Allocator/size_type.adoc[`size&lowbar;type`] 
| Alias for an unsigned integral type capable of representing the number of bytes in this platform&apos;s virtual address space&period;
|===


== Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/2constructor-0c.adoc[`ConcurrentMultipoolAllocator`]         [.small]#[constructor]#
| Constructors
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/2destructor.adoc[`&#126;ConcurrentMultipoolAllocator`] [.small]#[destructor]# [.small]#[virtual]#
| Destroy this multipool allocator&period; All memory allocated from this allocator is released&period;
| xref:BloombergLP/bslma/Allocator/operator_assign.adoc[`operator&equals;`] 
| 
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/allocate-0b.adoc[`allocate`] 
| `allocate` overloads
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/deallocate-0f.adoc[`deallocate`] 
| Return the memory block at `address` to this allocator for reuse&period;
| xref:BloombergLP/bslma/Allocator/deleteObject-09.adoc[`deleteObject`] 
| `deleteObject` overloads
| xref:BloombergLP/bslma/Allocator/deleteObjectRaw-06f.adoc[`deleteObjectRaw`] 
| `deleteObjectRaw` overloads
| xref:BloombergLP/bslma/Allocator/is_equal.adoc[`is&lowbar;equal`] 
| 
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/maxPooledBlockSize.adoc[`maxPooledBlockSize`] 
| Return the maximum size of memory blocks pooled by this allocator&period;
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/numPools.adoc[`numPools`] 
| Return the number of pools managed by this multipool allocator&period;
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/release.adoc[`release`]  [.small]#[virtual]#
| Relinquish all memory currently allocated through this multipool allocator&period;
| xref:BloombergLP/bdlma/ConcurrentMultipoolAllocator/reserveCapacity.adoc[`reserveCapacity`] 
| Reserve capacity for at least `numObjects` objects of `size` bytes&period;
|===


== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslma/Allocator/throwBadAlloc.adoc[`throwBadAlloc`] 
| Throw `std&colon;&colon;bad&lowbar;alloc` or abort the program&period;
|===


== Protected Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bslma/Allocator/do_allocate.adoc[`do&lowbar;allocate`]  [.small]#[virtual]#
| Return a newly allocated block of at least `bytes` with `alignment`&period;
| xref:BloombergLP/bslma/Allocator/do_deallocate.adoc[`do&lowbar;deallocate`]  [.small]#[virtual]#
| Return the memory block at `p` having `bytes` and `alignment`&period;
| xref:BloombergLP/bslma/Allocator/do_is_equal.adoc[`do&lowbar;is&lowbar;equal`]  [.small]#[virtual]#
| Return whether this allocator can exchange memory with `other`&period;
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
