控制對齊
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
中提供直接支援,用於為過度對齊型別分配記憶體。