411 REFERENCE · Wikibooks
C programming/stdalign.h
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
To query and specify the alignment of an object, include the header <stdalign.h> http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x p.268, §7.15 Alignment <stdalign.h> ISO/IEC.
Macro
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
alignas() specifies the alignment in bytes for declaring variableshttp://www.open-std.org/ jtc1/sc22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x p.48, §6.2.8 '' Alignment of objects''' ISO/IEChttp://www.open-std.org/jtc1/sc 22/wg14/www/docs/n1570.pdf C11: WG14/N1570 Committee Draft - April 12, 2011 ISO/IEC 9899:201x p.127, §6.7.5 Alignment specifier ISO/IEC.
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
alignof() returns the alignment required by the specified type in size_t .
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
The alignas type specifier (keyword_Alignas), alignof operator (keyword_Alignof), header<stdalign.h>, added in ISO/IEC 9899:2011.
Footnotes
References
ISO/IEC 9899:2018(en) Information technology - Programming languages - C(2018-07-05)