基于策略的对齐使对象不需要额外的大小

时间:2013-11-24 11:29:45

标签: c++ templates inheritance alignment

我创建了一个名为AlignmentPolicy的模板化结构:

template<int range> 
struct AlignmentPolicy;

template<> 
struct __declspec(align(1)) AlignmentPolicy<1> { };

template<>
struct __declspec(align(2)) AlignmentPolicy<2> { };

template<>
struct __declspec(align(4)) AlignmentPolicy<4> { };

template<>
struct __declspec(align(8)) AlignmentPolicy<8> { };

template<>
struct __declspec(align(16)) AlignmentPolicy<16> { };

template<>
struct __declspec(align(32)) AlignmentPolicy<32> { };

当我想要一个16字节对齐的结构时,我就这样做:

struct MyContainer : public AlignmentPolicy<16>
{
//... insides
};

然而,当我使用sizeof()测试我的类时,它们最终会比预期的更大。例如:

struct float2 : public AlignmentPolicy<16>
{
   float x;
   float y;
};

2个浮点数=每个4个字节。当对齐到16时,它应该变成16个字节,不是吗?但是sizeof告诉我float2是32个字节...我在继承AlignmentPolicy&lt;&gt;的所有结构中得到类似的行为。有没有解决方法或者我只能使用__declspec(align(16))?

0 个答案:

没有答案