Alignment manipulation

Aligned memory allocator

template<class T, size_t Align>
class 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

inline aligned_allocator() noexcept

Default constructor.

inline aligned_allocator(const aligned_allocator &rhs) noexcept

Copy constructor.

inline ~aligned_allocator()

Destructor.

inline pointer address(reference) noexcept

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

Parameters:

r – the object to acquire address of.

Returns:

the actual address of r.

inline const_pointer address(const_reference) const noexcept

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

Parameters:

r – the object to acquire address of.

Returns:

the actual address of r.

inline 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.

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

  • hint – unused parameter provided for standard compliance.

Returns:

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

inline 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:
inline size_type max_size() const noexcept

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

Returns:

the maximum supported allocated size.

inline size_type size_max() const noexcept

This method is deprecated, use max_size() instead.

template<class U, class ...Args>
inline 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>
inline 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>
inline aligned_allocator(const aligned_allocator<U, A>&) noexcept

Extended copy constructor.

template<class U>
struct rebind

Alignement checker

template<class Arch = default_arch>
inline bool xsimd::is_aligned(void const *ptr)

Checks whether pointer ptr is aligned according the alignment requirements of Arch.

Returns:

true if the alignment requirements are met