使用alignas来对齐struct

时间:2015-11-11 14:24:22

标签: c++ memory-alignment alignas

在以下结构中:

struct alignas(?) test
{
    int32_t f1; // 4 bytes
    int8_t f2; // 1 byte
    int8_t f3; // 1 byte
};

如何使用alignas以便sizeof(test)正好是6个字节?

编译器不接受

alignas(1)(gcc,msvc,clang)(错误如:error: requested alignment is less than minimum alignment of 4 for type 'test')。

UPD。当然,这种变体可以正常工作:

#pragma pack(push, 1)

struct alignas(?) test
{
    int32_t f1; // 4 bytes
    int8_t f2; // 1 byte
    int8_t f3; // 1 byte
};

#pragma pack(pop)

但是如果没有使用标准C ++ 11/14的预处理器,有没有办法呢?

1 个答案:

答案 0 :(得分:3)

没有。 alignas只允许您更严格地对齐,并且只能达到标准类型的最大对齐。

该标准没有提供错位类型的机制。