【发布时间】:2015-09-30 19:48:37
【问题描述】:
我编写了以下代码并在 gcc 上进行了测试:
// firstly some platform-specific workarounds
#if _MSC_VER
#define ALN_BEGIN(x) __declspec(align(x))
#define ALN_END(x)
#define alignof(x) __alignof(x)
#else
#define ALN_BEGIN(x)
#define ALN_END(x) __attribute__((aligned(x)))
#define alignof(x) __alignof__(x)
#endif
// struct have three 4-byte members, but aligned at 32 byte
ALN_BEGIN(32) struct Foo
{
float a;
float b;
float c;
} ALN_END(32);
// show its size and alignment
int main(int argc, char** argv)
{
printf("size %d, alignment%d\n", sizeof(Foo), alignof(Foo));
}
当我使用 gcc 编译并运行它时,虽然 Foo 的所有成员只有 12 个字节,但sizeof(Foo) 得到了 32,这是对齐大小。那么扩容是按照语言标准(靠谱)还是只是GCC的一个特性?
我正在创建一个对象池类,所以我必须精确地处理类型大小和对齐方式。
【问题讨论】:
标签: c++