C Programming/stdalign.h

From Wikibooks, open books for an open world
Jump to navigation Jump to search

To query and specify the alignment of an object, include the header <stdalign.h> [1].


Macro[edit | edit source]

In <stdalign.h>, four macros are defined.

alignas
Expanded to _Alignas.
alignof
Expanded to _Alignof.
_alignas_is_defined
expands to integer constant 1.
_alignas_is_defined

Expanded to integer constant 1. _alignas_is_defined and _alignof_is_defined are suitable for use with #if preprocessing directives.

alignas[edit | edit source]

alignas() specifies the alignment in bytes for declaring variables[2][3].

Example
#include <stdio.h>
#include <stdalign.h>

int main(void)
{
  alignas(65536) int i;
  alignas(256) int j;
  int k;
  printf("Address of i is %p\n", &i);
  printf("Address of j is %p\n", &j);
  printf("Address of k is %p\n", &k);
  return 0;
}
Result
Address of i is 0x7ffffffe0000
Address of j is 0x7ffffffeff00
Address of k is 0x7ffffffeffec

alignof[edit | edit source]

alignof() returns the alignment required by the specified type in size_t [2][3].

Example
#include <stdio.h>
#include <stdalign.h>

int main(void)
{
	printf("Alignment requirement for char is %zu.\n", alignof(char));
	printf("Alignment requirement for int is %zu.\n", alignof(int));
	printf("Alignment requirement for float is %zu.\n", alignof(float));
	printf("Alignment requirement for double is %zu.\n", alignof(double));
    return 0;
}
Result
Alignment requirement for char is 1.
Alignment requirement for int is 4.
Alignment requirement for float is 4.
Alignment requirement for double is 8.


History[edit | edit source]

The alignas type specifier (keyword_Alignas), alignof operator (keyword_Alignof), header<stdalign.h>, added in ISO/IEC 9899:2011[1].


Footnotes[edit | edit source]

  1. a b C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.268, §7.15 Alignment <stdalign.h>.
  2. a b jtc1/sc22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.48, §6.2.8 Alignment of objects'. {{cite book}}: Check |url= value (help)
  3. a b 22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x (PDF). ISO/IEC. p.127, §6.7.5 Alignment specifier. {{cite book}}: Check |url= value (help)


References[edit | edit source]