在 64 位边界上对齐 C++ 结构数组?
Align C++ array of structs on 64-bit boundaries?
我有一个 64 位结构数组,我想在 64 位边界上对齐:
struct AStruct
{
int x;
int y;
};
std::array<AStruct, 1000> array; // I'd like to align this on 64-bit boundary
我知道属性是 __attribute__((__aligned__(64))
但我不确定我是否需要对齐每个单独的结构、整个数组或为两者指定属性?
编译器是 Clang
I know the attribute is __attribute__((__aligned__(64))
那是语言扩展。没有必要使用它,因为有一个标准关键字来指定对齐方式:alignas
。将数组对齐到 64 位的示例:
alignas(64 / CHAR_BIT) std::array<AStruct, 1000> array;
I'm unsure whether I need to align each individual struct, the entire array or specify the attribute for both?
两者都不需要。
就对齐数组而言,两者都有效。如果您希望 class 的所有实例(包括此数组之外的其他实例)对齐,请为 class 指定它。如果你只想对齐这个数组,那么为变量指定它。
I have an array of 64-bit structs
请注意,虽然您的 class 在某些系统上可能是 64 位,但并非在所有系统上都是 64 位。它的范围可以从 32 位(16 位 int
)到 128 位(64 位 int
)。
您只需要对齐数组:
alignas(8) std::array<AStruct, 1000> array; //aligned on 64-bit boundary
参见:alignas
我有一个 64 位结构数组,我想在 64 位边界上对齐:
struct AStruct
{
int x;
int y;
};
std::array<AStruct, 1000> array; // I'd like to align this on 64-bit boundary
我知道属性是 __attribute__((__aligned__(64))
但我不确定我是否需要对齐每个单独的结构、整个数组或为两者指定属性?
编译器是 Clang
I know the attribute is
__attribute__((__aligned__(64))
那是语言扩展。没有必要使用它,因为有一个标准关键字来指定对齐方式:alignas
。将数组对齐到 64 位的示例:
alignas(64 / CHAR_BIT) std::array<AStruct, 1000> array;
I'm unsure whether I need to align each individual struct, the entire array or specify the attribute for both?
两者都不需要。
就对齐数组而言,两者都有效。如果您希望 class 的所有实例(包括此数组之外的其他实例)对齐,请为 class 指定它。如果你只想对齐这个数组,那么为变量指定它。
I have an array of 64-bit structs
请注意,虽然您的 class 在某些系统上可能是 64 位,但并非在所有系统上都是 64 位。它的范围可以从 32 位(16 位 int
)到 128 位(64 位 int
)。
您只需要对齐数组:
alignas(8) std::array<AStruct, 1000> array; //aligned on 64-bit boundary
参见:alignas