在 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