我注意到玩弄簡單的例子alignof(struct_name)
總是alignof
其結構組成的最大alignof
。這總是(或幾乎總是)這種情況?結構的`alignof`總是其組成部分的最大`alignof`嗎?
2
A
回答
2
結構的
alignof
總是最大的alignof
其組成部分?
alignof
宏擴展爲_Alignof
運算符,該運算符計算其操作數的對齊要求。對齊要求如何確定的大多數方面都是由實現定義的,因此從這個意義上說,假定您的建議總是或甚至通常成立並不安全。
然而,您觀察到的模式仍然很常見。爲了使實現確保給定結構類型的每個實例的每個成員根據該成員類型的對齊要求對齊,實現必須爲總體結構類型選擇對齊要求,該對齊要求至少與任何成員的最大對準要求。另一方面,選擇儘可能小的對齊要求有助於有效使用存儲器。這些組合導致您觀察到的對齊行爲。
但是我重申,對齊要求大部分是實現定義的。即使不考慮_Alignas
操作符的影響,實現也沒有義務根據您的模式選擇結構對齊要求。例如,實現可以選擇爲每個結構類型分配(至少)最大基本對齊,而不管其成員類型如何。
然而,最終,你不得不想知道你爲什麼在意。雖然並非前所未有,但您需要知道或應該依賴於類型的對齊要求,這種情況很少見。如果你想要一個特定的對齊需求,你最好直接聲明它,而不是試圖使用成員的類型來影響它。
相關問題
- 1. alignof?
- 2. alignof(雙)在MSVC的win32
- 3. sizeof和alignof有什麼區別?
- 4. 應該std :: vector榮譽alignof(value_type)?
- 5. 如何使用alignof爲堆分配強制對齊?
- 6. 英特爾編譯器 - 錯誤:標識符「alignof」未定義
- 7. 結構數組的最大尺寸
- 8. 如何分割的總和成其組成部分,而不在python
- 9. MATLAB:確定結構數組的結構數組的總長度/大小作爲結構數組的字段
- 10. 以下是最快的MYSQL結構嗎?
- 11. 總結巨大的2D NumPy數組的最有效方法,按ID列分組?
- 12. 結構數組總是比數組結構更快?
- 13. 如何聲明內部有大型結構數組的結構
- 14. 線性結構是最好的分類生產嗎?
- 15. 總線錯誤10與二維數組結構內部結構
- 16. 將一組數字分成兩部分,其中差異最小
- 17. 是對象層次結構的接口部分嗎?
- 18. 區域總是變成0結構
- 19. 按組,通過總結部分行
- 20. MySQL的分組和總結
- 21. 在文件結構中組織部分視圖的最佳方法是什麼?
- 22. 獲得最大的用戶評分與分鐘時間總結
- 23. 爲什麼結構的大小需要是任何結構成員的最大對齊的倍數
- 24. 結構成員的大小
- 25. 分組和取消分組形狀的最佳數據結構是什麼
- 26. 獲取元組字典中元組最大組成部分的關鍵
- 27. 獲取與分組SQL的最大總和值的記錄結果
- 28. MySQL - 得到總和()分組的最大()組
- 29. 查找最大總和子列表和總結分而治之
- 30. memcpy結構的一部分
幾乎總是 - 絕對。總是 - 如果有人熱心並且指定了比必要更嚴格(更大)的_Alignas值,也許不會。我保留判斷這是否意味着'alignof'與'alignas'是否相同。 –
而且這樣做肯定有很好的理由。對齊緩存行邊界,對齊SIMD指令,... – spectras
我想我聽說過所有4字節結構都對齊4的系統,即使它們的成員都對齊1。 – o11c