アライメントについてもっと知りたいです。Microsoft コンパイラ (Visual Studio 2012 Express) が次のコード スニペットの配置について不平を言うのはなぜですか?
__declspec(align(16)) class Foo
{
public:
virtual ~Foo() {}
virtual void bar() = 0;
};
これはコンパイラが私に提示する警告です:
warning C4324: 'Foo' : structure was padded due to __declspec(align())
クラスに仮想メソッドがあるかどうかは問題ではありません。空のクラスの場合でも、コンパイラは同じ警告メッセージを出します。空のクラスはどのように配置されますか? コンパイラはこのクラスをどのようにパディングしますか?