境界調整(アラインメント)の要求サイズが必要になることがときどきあります。組込み開発ではとくに必要になることが多いのではないでしょうか?

C++11以降であれば、そのものずばりの機能であるalignof演算子が使えます。使い方はsizeof演算子とほぼ同じですが、オペランドには型しか指定することができません。

また、これもC++11以降になりますが、<type_traits>にstd::alignment_ofメタ関数が用意されています。得られる結果はalignof演算子と同じですが、メタ関数の体裁を取っています。

C++11より前のバージョンの場合、TR1またはBoost C++ Librariesのboost::alignment_ofメタ関数を使うことができます。

どうしても自力で境界調整の要求サイズを求める必要がある場合、以下のようにして求めることもできます。

また、GCC拡張には古くから__alignof__演算子が備わっています。__alignof__演算子はオペランドに型だけでなく式を受け取ることもできますが、移植性の問題があるのでなるべく使わない方がよいでしょう。


元ネタ

↑ 5. 一般のデータ型に関するテンプレート