2017-09-02 16 views
2

我注意到玩弄簡單的例子alignof(struct_name)總是alignof其結構組成的最大alignof。這總是(或幾乎總是)這種情況?結構的`alignof`總是其組成部分的最大`alignof`嗎?

+1

幾乎總是 - 絕對。總是 - 如果有人熱心並且指定了比必要更嚴格(更大)的_Alignas值,也許不會。我保留判斷這是否意味着'alignof'與'alignas'是否相同。 –

+0

而且這樣做肯定有很好的理由。對齊緩存行邊界,對齊SIMD指令,... – spectras

+1

我想我聽說過所有4字節結構都對齊4的系統,即使它們的成員都對齊1。 – o11c

回答

2

結構的alignof總是最大的alignof其組成部分?

alignof宏擴展爲_Alignof運算符,該運算符計算其操作數的對齊要求。對齊要求如何確定的大多數方面都是由實現定義的,因此從這個意義上說,假定您的建議總是或甚至通常成立並不安全。

然而,您觀察到的模式仍然很常見。爲了使實現確保給定結構類型的每個實例的每個成員根據該成員類型的對齊要求對齊,實現必須爲總體結構類型選擇對齊要求,該對齊要求至少與任何成員的最大對準要求。另一方面,選擇儘可能小的對齊要求有助於有效使用存儲器。這些組合導致您觀察到的對齊行爲。

但是我重申,對齊要求大部分是實現定義的。即使不考慮_Alignas操作符的影響,實現也沒有義務根據您的模式選擇結構對齊要求。例如,實現可以選擇爲每個結構類型分配(至少)最大基本對齊,而不管其成員類型如何。

然而,最終,你不得不想知道你爲什麼在意。雖然並非前所未有,但您需要知道或應該依賴於類型的對齊要求,這種情況很少見。如果你想要一個特定的對齊需求,你最好直接聲明它,而不是試圖使用成員的類型來影響它。

相關問題