[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.28 型や変数のアラインメントの問い合わせ

キーワード __alignof__ をオブジェクトに対して使うと、その オブジェクトのアラインメントを返し、型に対して使うとその型で 通常必要とされる最小のアラインメントを返す。 構文は sizeof と同じである。

例えば、ターゲット機種が double の値が 8 バイト境界に 揃うことを要求している場合には、__alignof__ (double) は 8 になる。 これは、多くの RISC 機種で実際に正しい。それよりは古目の設計の機種では、 __alignof__ (double) は 4 だったり、2 ということさえある。

機種によってはアラインメントを全く必要としないものもある。 そういう機種では、どんな型に対する参照も、たとえ奇数アドレスにあっても 許される。こういう機種に対しては、__alignof__ は、 型の 推奨 アライメントを報告する。

__alignof__ のオペランドが型ではなくて左辺値の時は、 その左辺値が取ることが知られているうちの最大のアラインメントが、 __alignof__ の値となる。このアラインメントはそのデータ型自体に よる場合もあるし、それが構造体の一部であり、その構造体のアラインメントを 継承していることによる場合もある。例えば、以下のように宣言したとする。

 
struct foo { int x; char y; } foo1;

__alignof__ (foo1.y) の値はおそらく 2 か 4 になり、それは __alignof__ (int) と同じになる。これは、foo1.y の データ型はそれ自体はなんらアラインメントを要求しないとしてもである。

オブジェクトのアラインメントを指定する関連する機能としては、 __attribute__ ((aligned (alignment))) がある。 次のセクションを参照のこと。


This document was generated using texi2html 1.78.