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)