Aligned memory allocator

template<class T, size_t Align>
class xsimd::aligned_allocator

Allocator for aligned memory.

The aligned_allocator class template is an allocator that performs memory allocation aligned by the specified value.

Template Parameters
  • T: type of objects to allocate.

  • Align: alignment in bytes.

Public Functions

aligned_allocator() noexcept

Default constructor.

aligned_allocator(const aligned_allocator &rhs) noexcept

Copy constructor.

~aligned_allocator()

Destructor.

pointer address(reference) noexcept

Returns the actual address of r even in presence of overloaded operator&.

Return

the actual address of r.

Parameters
  • r: the object to acquire address of.

const_pointer address(const_reference) const noexcept

Returns the actual address of r even in presence of overloaded operator&.

Return

the actual address of r.

Parameters
  • r: the object to acquire address of.

pointer allocate(size_type n, const void *hint = 0)

Allocates n * sizeof(T) bytes of uninitialized memory, aligned by A.

The alignment may require some extra memory allocation.

Return

a pointer to the first byte of a memory block suitably aligned and sufficient to hold an array of n objects of type T.

Parameters
  • n: the number of objects to allocate storage for.

  • hint: unused parameter provided for standard compliance.

void deallocate(pointer p, size_type n)

Deallocates the storage referenced by the pointer p, which must be a pointer obtained by an earlier call to allocate().

The argument n must be equal to the first argument of the call to allocate() that originally produced p; otherwise, the behavior is undefined.

Parameters

size_type max_size() const noexcept

Returns the maximum theoretically possible value of n, for which the call allocate(n, 0) could succeed.

Return

the maximum supported allocated size.

size_type size_max() const noexcept

This method is deprecated, use max_size() instead.

template<class U, class ...Args>
void construct(U *p, Args&&... args)

Constructs an object of type T in allocated uninitialized memory pointed to by p, using placement-new.

Parameters
  • p: pointer to allocated uninitialized memory.

  • args: the constructor arguments to use.

template<class U>
void destroy(U *p)

Calls the destructor of the object pointed to by p.

Parameters
  • p: pointer to the object that is going to be destroyed.

template<class U>
aligned_allocator(const aligned_allocator<U, A>&) noexcept

Extended copy constructor.

template<class U>
struct rebind

Comparison operators

template<class T1, size_t A1, class T2, size_t A2>
bool operator==(const aligned_allocator<T1, A1> &lhs, const aligned_allocator<T2, A2> &rhs) noexcept

Compares two aligned memory allocator for equality.

Since allocators are stateless, return true iff A1 == A2.

Return

true if the allocators have the same alignment.

Parameters

template<class T1, size_t A1, class T2, size_t A2>
bool operator!=(const aligned_allocator<T1, A1> &lhs, const aligned_allocator<T2, A2> &rhs) noexcept

Compares two aligned memory allocator for inequality.

Since allocators are stateless, return true iff A1 != A2.

Return

true if the allocators have different alignments.

Parameters