我想更多地了解对齐。为什么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())
即使这个类没有任何虚方法,也并不重要。即使是一个空的类,编译器也会显示相同的警告信息。一个空类如何对齐?编译器如何填充这个类?
__declspec(align())
的空类的大小。如果它是1,则必然对齐为1。此外,C++11有一个alignof
运算符,因此如果您可以从Visual C++中获取该值,则可以消除所有疑虑。 - Steve JessopWall
时看到的结构填充警告。 - Mysticial