【问题标题】:Align C++ array of structs on 64-bit boundaries?在 64 位边界上对齐 C++ 结构数组?
【发布时间】:2020-06-30 12:26:00
【问题描述】:

我有一个 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

【问题讨论】:

标签: c++ memory-alignment


【解决方案1】:

您只需要对齐数组:

alignas(8) std::array<AStruct, 1000> array; //aligned on 64-bit boundary

见:alignas

【讨论】:

    【解决方案2】:

    我知道属性是__attribute__((__aligned__(64))

    这是一个语言扩展。无需使用它,因为有一个标准关键字来指定对齐方式:alignas。将数组对齐到 64 位的示例:

    alignas(64 / CHAR_BIT) std::array<AStruct, 1000> array;
    

    我不确定是否需要对齐每个单独的结构、整个数组或为两者指定属性?

    两者都不需要。

    就对齐数组而言,两者都有效。如果您希望该类的所有实例(包括此数组之外的其他实例)对齐,请为该类指定它。如果您只想对齐此数组,请为变量指定它。


    我有一个 64 位结构数组

    请注意,虽然您的类在某些系统上可能是 64 位,但并非在所有系统上都是 64 位。范围从 32 位(16 位 int)到 128 位(64 位 int)。

    【讨论】:

    • 忘了说我在尺寸上有一个static_assert
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多