Looking for c++ Answers? Try Ask4KnowledgeBase
Looking for c++ Keywords? Try Ask4Keywords

C++アラインメント


前書き

C ++のすべての型は整列しています。これは、そのタイプのオブジェクトを作成できるメモリアドレスの制限です。そのアドレスをオブジェクトの整列で割ると整数である場合、メモリアドレスはオブジェクトの作成に有効です。

型の整列は常に2の累乗です(1を含む)。

備考

標準では、次のことが保証されています。

  • 型の整列要件は、そのサイズの約数です。たとえば、サイズが16バイトのクラスは、1,2,4,8,16のいずれかのアライメントを持つことができますが、32ではできません(クラスのメンバーのサイズは合計14バイトですが、クラスはアラインメント要件を持つ必要があります)コンパイラは、2のパディングバイトを挿入して、クラスのサイズを16にします)。
  • 整数型の符号付きバージョンと符号なしバージョンのアラインメント要件は同じです。
  • voidへのポインターは、 charへのポインターと同じ位置合わせ要件を持ちます。
  • 型のcv-qualifiedバージョンとcv-unqualifiedバージョンは、同じ位置合わせ要件を持ちます。

アライメントはC ++ 03に存在するが、C ++ 11まではアラインメント( alignofを使用)とアライメントの制御( alignasを使用)が可能になるまでではなかったことに注意してください。

アラインメント 関連する例