Allocator that allows std::* containers to manage their memory through ut::malloc* and ut::free library functions.
More...
|
| allocator (PSI_memory_key key=mem_key_std) |
| Default constructor. More...
|
|
| allocator (const allocator< T, Allocator_base > &)=default |
|
allocator< T, Allocator_base > & | operator= (const allocator< T, Allocator_base > &)=default |
|
| allocator (allocator< T, Allocator_base > &&)=default |
|
allocator< T, Allocator_base > & | operator= (allocator< T, Allocator_base > &&)=default |
|
| ~allocator ()=default |
|
template<typename U > |
| allocator (const allocator< U, Allocator_base > &other) |
| Copy-construct a new instance of allocator with type T by using existing instance of allocator constructed with a different type U. More...
|
|
bool | operator== (const ut::allocator< T, Allocator_base > &) const |
| Equality of allocators instantiated with same types T. More...
|
|
bool | operator!= (const ut::allocator< T, Allocator_base > &other) const |
| Non-equality of allocators instantiated with same types T. More...
|
|
size_type | max_size () const |
| Return the maximum number of objects that can be allocated by this allocator. More...
|
|
pointer | allocate (size_type n_elements, const_pointer hint=nullptr) |
| Allocates chunk of memory that can hold n_elements objects of type T. More...
|
|
void | deallocate (pointer ptr, size_type n_elements=0) |
| Releases the memory allocated through ut::allocator<T>::allocate(). More...
|
|
template<typename T, typename Allocator_base = std::conditional_t< ut::WITH_PFS_MEMORY, detail::allocator_base_pfs<T>, detail::allocator_base<T>>>
class ut::allocator< T, Allocator_base >
Allocator that allows std::* containers to manage their memory through ut::malloc* and ut::free library functions.
Main purpose of this custom allocator is to instrument all of the memory allocations and deallocations that are being done by std::* containers under the hood, and have them recorded through the PFS (memory) engine.
Other than std::* containers, this allocator is of course also suitable for use in any other allocator-aware containers and/or code.
Given that ut::malloc* and ut::free library functions already handle all the PFS and non-PFS implementation bits and pieces, this allocator is a mere wrapper around them.
Example which uses default PFS key (mem_key_std) to trace all std::vector allocations and deallocations: std::vector<int, ut::allocator<int>> vec; vec.push_back(...); ... vec.push_back(...);
Example which uses user-provided PFS key to trace std::vector allocations and deallocations: ut::allocator<int> allocator(some_other_psi_key); std::vector<int, ut::allocator<int>> vec(allocator); vec.push_back(...); ... vec.push_back(...);