std::allocator<T>::allocate (3) - Linux Man Pages
pointer allocate( size_type n, const void * hint = 0 ); (1) (until C++17)
T* allocate( std::size_t n, const void * hint); (1) (deprecated)
T* allocate( std::size_t n ); (since C++17)
[[nodiscard]] T* allocate( std::size_t n ); (since C++20)
Allocates n * sizeof(T) bytes of uninitialized storage by calling ::operator_new(std::size_t)
or ::operator_new(std::size_t, std::align_val_t)
(since C++17), but it is unspecified when and how this function is called. The pointer hint may be used to provide locality of reference: the allocator, if supported by the implementation, will attempt to allocate the new memory block as close as possible to hint.
n - the number of objects to allocate storage for
hint - pointer to a nearby memory location
Pointer to the first byte of a memory block suitably aligned and sufficient to hold an array of n objects of type T.
Throws std::bad_alloc if allocation fails.
The "unspecified when and how" wording makes it possible to combine_or_optimize_away_heap_allocations made by the standard library containers, even though such optimizations are disallowed for direct calls to ::operator new. For example, this is implemented by libc++ ( and )
allocate allocates uninitialized storage using the allocator