有沒有什麼辦法可以強制使用GNUism對結構的特定元素進行對齊?如何對齊結構的元素?
1
A
回答
3
嘗試6.54.8 Structure-Packing Pragmas
對於與Microsoft Windows編譯器的兼容性,GCC支撐一組#pragma指令,其改變 結構的成員的 最大對齊(大於零寬度 位域除外) ,隨後定義了工會和類別 。下面的n值 總是要求爲2的冪,並指定新的 以字節爲單位的對齊。
#pragma pack(n)
只是設置新的比對。#pragma pack()
設置對齊到一個在 效果編譯時開始(見 還命令行選項-fpack-struct[=<n>]
看到代碼生成選項)。#pragma pack(push[,n])
推動 內部堆棧上的當前對齊設置,然後可選地 設置新對齊。#pragma pack(pop)
將對齊設置恢復爲保存在內部堆棧頂部的 (並且 刪除該堆棧條目)。請注意,#pragma pack([n])
不會影響此內部堆棧;因此它是 可能有#pragma pack(push)
其次是多個#pragma pack(n)
實例和由單個#pragma pack(pop)
最終確定。一些目標,例如, i386和powerpc, 支持
ms_struct
#pragma
其中 奠定了結構爲記錄的__attribute__ ((ms_struct))
。
#pragma ms_struct on
打開聲明結構的佈局。#pragma ms_struct off
關閉已聲明結構的佈局。#pragma ms_struct reset
回到默認佈局。
3
http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Type-Attributes.html
aligned (alignment)
This attribute specifies a minimum alignment (in bytes) for variables of the specified type. > For example, the declarations:
struct S { short f[3]; } __attribute__ ((aligned (8)));
typedef int more_aligned_int __attribute__ ((aligned (8)));
0
您可以嘗試在結構排列的屬性:
__attribute__((__aligned__(8)))
0
除了列出的東西,你也可能有興趣在屬性( (packed)),它試圖在沒有任何填充的情況下佈置數據 - 基本上對齊設置爲1. Th在描述填充字節應該消失的文件或網絡協議中的數據佈局時非常有用。
相關問題
- 1. 結構對齊
- 2. 對齊元素
- 3. 用於確定C/C++結構中元素對齊的算法
- 4. 如何對齊的元素中的TableRow
- 5. 如何將元素與另一個與flex對齊的元素對齊?
- 6. 如何對齊界面構建器中的視圖元素?
- 7. 如何對齊div內的元素
- 8. 如何垂直對齊Div的元素
- 9. 如何對齊td中的元素?
- 10. 如何對齊div內的span元素?
- 11. 如何對齊結構的數組,每個需要對齊(SSE)
- 12. C++對齊結構
- 13. C結構對齊
- 14. C結構對齊
- 15. 如何對齊div中的左元素與居中對齊
- 16. 如何在一段右對齊的文本下對齊元素?
- 17. 左對齊元素寬度的對齊元素
- 18. Bootstrap元素對齊
- 19. CSS對齊元素
- 20. 對齊div元素
- 21. Android對齊元素
- 22. GridLayout - 對齊元素
- 23. 如何關閉對齊網格結構
- 24. 如何在結構內部對齊__m256d?
- 25. 對齊列表元素中的元素
- 26. C結構的對齊
- 27. 如何對齊測試元素旁邊的流程元素?
- 28. 如何底部對齊DIV元素中的兩個元素?
- 29. CSS:如何對齊居中元素周圍的元素?
- 30. CSS - 我如何對齊這些元素?