C言語/標準ライブラリ/stdalign.h
表示
オブジェクトのアライメントの問い合わせと指定をするためには、ヘッダー<stdalign.h> をインクルードします[1]。
マクロ
[編集]<stdalign.h> では、4つのマクロが定義されます。
- alignas
- キーワード
_Alignasに展開されます。 - alignof
- キーワード
_Alignofに展開されます。 - _alignas_is_defined
- 整数の定数1に展開されます。
- _alignas_is_defined
- 整数の定数1に展開されます。
_alignas_is_defined と _alignof_is_defined は、#if 前処理ディレクティブでの使用に適しています。
alignas
[編集]alignas()は、変数を宣言するにあたりアライメントをバイト単位で指定します[2][3]。
- 例
#include <stdalign.h> #include <stdio.h> int main(void) { alignas(65536) int i; alignas(256) int j; int k; printf("iのアドレスは%p\n", &i); printf("jのアドレスは%p\n", &j); printf("kのアドレスは%p\n", &k); return 0; }
- 結果
iのアドレスは0x7ffffffe0000 jのアドレスは0x7ffffffeff00 kのアドレスは0x7ffffffeffec
alignof
[編集]alignof() は、指定した型が要求するアライメントを size_t で返します[2][3]。
- 例
#include <stdalign.h> #include <stdio.h> int main(void) { printf("charのアラインメント要件は%zu。\n", alignof(char)); printf("intのアラインメント要件は%zu。\n", alignof(int)); printf("floatのアラインメント要件は%zu。\n", alignof(float)); printf("doubleのアラインメント要件は%zu。\n", alignof(double)); return 0; }
- 結果
charのアラインメント要件は1。 intのアラインメント要件は4。 floatのアラインメント要件は4。 doubleのアラインメント要件は8。
歴史
[編集]alignas型指定子(キーワード_Alignas)、alignof演算子(キーワード_Alignof)、ヘッダー<stdalign.h>、ISO/IEC 9899:2011で追加されました[1]。
脚註
[編集]- ^ 1.0 1.1 C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p.268, §7.15 Alignment <stdalign.h>.
- ^ 2.0 2.1 C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p.48, §6.2.8 Alignment of objects.
- ^ 3.0 3.1 C11: WG14/N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p.127, §6.7.5 Alignment specifier.
関連項目
[編集]- C++/キーワード -- alignas と alignofは、C++のキーワードです。
- C言語/標準ライブラリ/一般ユーティリティ#aligned_alloc関数 --
aligned_allocはアライメント関連ですが、ヘッダー<stdlib.h>で宣言されます。
参考文献
[編集]- 国際標準化機構/国際電気標準会議 ISO/IEC 9899:2018(en) Information technology — Programming languages — C(2018-07-05)