memalignment

From cppreference.com
< c‎ | program
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

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

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)