使用 alignas 对齐结构
Use alignas to align struct
在以下结构中:
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'
)。
更新。当然,这个变体可以正常工作:
#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 而无需预处理器就可以做到这一点?
没有。 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'
)。
更新。当然,这个变体可以正常工作:
#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 而无需预处理器就可以做到这一点?
没有。 alignas
只允许您使对齐更严格,并且只能达到标准类型的最大对齐。
该标准未提供类型不对齐的机制。