memalignment

From cppreference.com
Defined in header <stdlib.h>
size_t memalignment ( const void * p ) ;
(since C23)

Returns the maximum alignment satisfied by the provided address. The return value can be greater than any alignment value supported by the implementation. If p is a null pointer value, 0 is returned to indicate that the pointer cannot be used to access an object of any type.

If the return value compares is greater than or equal to alignof ( T ) , the alignment requirement for the type T is satisfied by the pointer.

A freestanding implementation needs to provide memalignment .

Parameters

p - pointer to query alignment

Return value

The alignment value of p , or 0 if p is a null pointer value.

Notes

On common platforms where

  • null pointers are cast to integer 0 ,
  • pointer values are directly cast to the numeric values of virtual addresses, and
  • size_t is same as uintptr_t ,

this function can be implemented as return ( size_t ) p & - ( size_t ) p ; .

Example

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    alignas(128) int i = 0;
    printf("%zu\n%zu\n", memalignment(nullptr), memalignment(&i));
}

Possible output:

0
128

References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.24.9.1 The memalignment function (p: 374)

See also

allocates aligned memory
(function)
deallocates previously allocated sized and aligned memory
(function)