簡體   English   中英

在 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

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

那是語言擴展。 沒有必要使用它,因為有一個標准關鍵字來指定 alignment: alignas 將數組對齊到 64 位的示例:

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

我不確定是否需要對齊每個單獨的結構、整個數組或為兩者指定屬性?

兩者都沒有必要。

就對齊陣列而言,兩者都有效。 如果您希望 class 的所有實例(包括此數組之外的其他實例)對齊,則為 class 指定它。 如果您只想對齊此數組,請為變量指定它。


我有一個 64 位結構數組

請注意,雖然您的 class 在某些系統上可能是 64 位,但並非在所有系統上都是 64 位。 它的范圍可以從 32 位(16 位int )到 128 位(64 位int )。

您只需要對齊數組:

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

參見: alignas

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM