控制對齊
Version >= C++ 11
alignas 關鍵字可用於強制變數,類資料成員,類的宣告或定義,或列舉的宣告或定義,以獲得特定的對齊(如果支援)。它有兩種形式:
- alignas(x),其中- x是常量表示式,如果支援,則為實體提供對齊- x。
- alignas(T),其中- T是一個型別,給實體一個等於- T的對齊要求的對齊,即- alignof(T),如果支援的話。
如果將多個 alignas 說明符應用於同一實體,則應用最嚴格的說明符。
在這個例子中,保證緩衝區 buf 被適當地對齊以保持 int 物件,即使它的元素型別是 unsigned char,其可能具有較弱的對齊要求。
alignas(int) unsigned char buf[sizeof(int)];
new (buf) int(42);
alignas 不能用於為型別提供比沒有此宣告時型別更小的對齊:
alignas(1) int i; //Il-formed, unless `int` on this platform is aligned to 1 byte.
alignas(char) int j; //Il-formed, unless `int` has the same or smaller alignment than `char`.
alignas,當給定整數常量表示式時,必須給出有效的對齊方式。有效對齊始終為 2 的冪,且必須大於零。編譯器需要支援所有有效的對齊,直到 std::max_align_t 的對齊方式。它們可能支援比這更大的對齊,但是為這些物件分配記憶體的支援是有限的。對齊的上限取決於實現。
C++ 17 在 operator new 中提供直接支援,用於為過度對齊型別分配記憶體。